- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
#include <stdio.h>
void *labels[3];
void test(void *ptr)
{
if(ptr == NULL)
{
labels[0] = &&l1;
labels[1] = &&l2;
labels[2] = &&l3;
return;
}
goto *ptr;
l1:
printf("test1\n");
return;
l2:
printf("test2\n");
return;
l3:
printf("test3\n");
return;
}
int main(void)
{
test(NULL);
test(labels[0]);
test(labels[1]);
test(labels[2]);
}
j123123 11.04.2017 17:58 # −9
cykablyad 11.04.2017 18:03 # 0
j123123 11.04.2017 18:04 # −10
cykablyad 11.04.2017 18:06 # 0
j123123 11.04.2017 18:08 # −9
cykablyad 11.04.2017 18:13 # 0
j123123 11.04.2017 18:16 # −9
huesto 11.04.2017 18:24 # −18
bormand 11.04.2017 18:26 # −18
huesto 11.04.2017 18:29 # −18
roman-kashitsyn 11.04.2017 18:30 # +7
cykablyad 11.04.2017 19:00 # 0
Я пизданулся
cykablyad 11.04.2017 19:10 # 0
Так даже чуть лучше
Dummy00001 11.04.2017 19:46 # +15
Dummy00001 11.04.2017 19:09 # +15
но ты так и не сказал чем тебе switch не угодил.
с другой стороны, народ давно такое уже делал - просто с помощью указателей на функции. и этот подход сильно здравому рассудку не противоречит, по сравнению с computed goto.
AntiSpam 11.04.2017 19:10 # −24
j123123 11.04.2017 21:43 # 0
switch не всегда будет оттранслирован компилятором в таблицу переходов, а computed goto - всегда.
> с другой стороны, народ давно такое уже делал - просто с помощью указателей на функции.
Может так оказаться, что от вызовов через указатели на функции будет больше оверхеда, чем через computed goto в пределах одной функции, если пишется интерпретатор(шитый код)
CnEPMA 11.04.2017 21:45 # −23
Dummy00001 11.04.2017 22:08 # +15
не от хорошей жизни же. и индексы часто не по порядку/с дырками, и кода часто слишком много для коротких переходов, и каких еще побочных эффектов с fall-through.
> вызовов через указатели на функции будет больше оверхеда, чем через computed goto в пределах одной функции
очевидно что у вызова выше оверхед, по сравнению с computer goto. с другой стороны, все те ограничения на которые ты жалуешься как раз и происходят то того что goto прологов/эпилогов не делает. поэтому и быстрее. но поэтому и только в пределах функции.
с другой стороны чувствую что ты на каких микро-контроллерах этим страдаешь. а там ведь что джамп, что колл - почти одинаково тормозят. "premature optimization".
huesto 11.04.2017 18:12 # −18
huesto 11.04.2017 18:38 # −18
Как она работает? Разве можно в чужую память лезть?
j123123 11.04.2017 18:39 # −9
huesto 11.04.2017 18:41 # −18
j123123 11.04.2017 18:42 # −10
А еще можно /proc/12345/mem читать
Antervis 18.04.2017 18:57 # −1
guestinh0 18.04.2017 19:01 # −5
j123123 20.04.2017 10:43 # −1
Lev_gLandau 20.04.2017 15:00 # +1
j123123 12.04.2017 01:39 # +1
Было б наверное норм
AntiSpam 12.04.2017 01:41 # −11
j123123 12.04.2017 01:42 # +3
AntiSpam 12.04.2017 01:47 # −11
bormand 12.04.2017 07:20 # −23
dxd 12.04.2017 07:49 # −1
j123123 13.04.2017 13:43 # 0
dxd 13.04.2017 13:48 # −2
bormand 13.04.2017 18:25 # −5
AntiUeban 13.04.2017 18:39 # −11
j123123 14.04.2017 21:57 # 0
Я вот даже бенчмарк запилил
https://gist.github.com/j123123/2412d39ce79b52ff6d6069300f392056
bormand 14.04.2017 22:04 # −22
roman-kashitsyn 14.04.2017 23:58 # +1
Шланг же превращает сорцы в .llvm, так не так всё грустно.
bormand 15.04.2017 00:28 # −23
j123123 15.04.2017 01:38 # +2
Но на самом деле все компиляторы говно, и надо чтобы компиляторы могли в символьнуые вычисления с логикой Хоара, формальная верификация, суперкомпиляция, гомоиконность, возможность написания domain-specific оптимизаций http://govnokod.ru/22687#comment379779
или вот например, есть две сортировки которые обе правильно работают т.е. без багов
и вот собственно компилятор чтоб мог логикой Хоара доказать что обе сортировки одинаковые последовательности байт выдадут, и соответственно нефиг вообще делать проверку if( a1_sorted == a2_sorted)
Кроме того, если сортированные массивы впоследствии никак не используются, то можно даже и scanf (a[0...299]); выкинуть, как и сам char a[300]; оставив только имитацию его работы, ну типа если пользователь должен по логике набрать через пробел 300 чисел, то оно будет это все как бы читать(наблюдаемое пользователем поведение будет таким же), но фактически никуда эти числа записываться в массив не будут, т.к. незачем потому что мы знаем точно что что бы туда не вводили, один хрен будет printf("ok, good!");
Вот это действительно заебись будет
dxd 15.04.2017 10:03 # 0
А сборка пыха таким компилятором вообще должна standalone-версию джумлы выплёвывать.
j123123 15.04.2017 14:49 # 0
Не факт. bubble_sort вполне может уделать qsort на каких-нибудь почти сортированных данных, где в случайных местах перемешаны пары элементов, типа 1 0 2 3 4 6 5 7 9 8. Но вот слегка заоптимизировать bubble_sort было б совсем не лишним. Например, если bubble_sort проходится по массиву из начала в конец, то следующий обход можно делать на единицу меньше (т.е. сортировать уже не n элементов массива, а n-1) т.к. в самую последнюю позицию массива засунуто наибольшее значение, и учитывать его смысла никакого нет
Antervis 18.04.2017 19:06 # 0
1024-- 18.04.2017 20:34 # +2
> божественная оптимизация. Увеличиваем вес одной итерации вдвое, зато уменьшаем сложность с 0.5*n^2 до 0.5*(n-1)*n
Как оказалось, j123123 совершил прорыв в теории алгоритмов и обнаружил суть сортировки пузырьком: самый большой элемент "всплывает", из-за чего на следующей итерации количество неотсортированных элементов снижается и вместо n^2 получается 0.5 n^2. Но это уже и так сортировка пузырьком, в неё вшита эта "оптимизация". Соответственно, вес одной итерации остаётся прежним.
>> bubble_sort вполне может уделать qsort на каких-нибудь почти сортированных данных
Предлагаю шейкерную сортировку как пример. Для m неотсортированных элементов сложность не превысит (2m+1)n.
j123123 18.04.2017 22:01 # 0
https://habrahabr.ru/post/204600/
barop 18.04.2017 22:04 # −23
dxd 19.04.2017 08:53 # 0
inkanus-gray 19.04.2017 11:40 # 0
roman-kashitsyn 19.04.2017 12:08 # 0
Я тоже не напишу. Постоянно приходится гуглить, чем она отличается от нормальной сортировки вставками.
dxd 19.04.2017 12:50 # 0
CHayT 19.04.2017 13:22 # +2
Ибо в детстве я не додумался прочитать документацию по стандартным BlackBox'овским коллекциям, но додумался до пузырька, сортировки выбором и счётом. Последним алгоритмом я прямо очень гордился, линейная сложность, хули.
С этим связан позорный момент, что в первом софтварном рендере я не использовал z-буфер, а именно сортировал точки, включая невидимые.
CnEPMA 19.04.2017 20:22 # −2
guest 21.04.2017 22:13 # −17
<a href=" http://cialis5mgohnerezeptbestellen.com/ ">cialis 5mg rezeptfrei bestellen </a>
guest 21.04.2017 22:18 # −17
<a href=" http://viagraohnerezeptapothekepernachnahme.com/ ">viagra ohne rezept apotheke per nachnahme </a>
guest 21.04.2017 22:25 # −17
<a href=" http://sildenafil100mgrezeptfreikaufen.com/ ">sildenafil basics 100mg fta 60 st </a>
guest 21.04.2017 23:16 # −6
<a href=" http://viagragenerikakaufenindeutschland.com/ ">viagra generika kaufen deutschland paypal </a>
guest 21.04.2017 23:29 # −5
<a href=" http://sildenafilratiopharmkaufenohnerezept.com/ ">sildenafil ratiopharm teilbar </a>
guest 21.04.2017 23:36 # −5
<a href=" http://cialisgenerikaindeutschlandkaufen.com/ ">cialis generika aus deutschland paypal </a>
guest 22.04.2017 21:10 # 0
<a href=" http://propeciaprixpharmacie.com/ ">propecia prix maroc </a>
guest 22.04.2017 21:13 # 0
<a href=" http://acheterpropeciasansordonnance.com/ ">achat propecia sans ordonnance </a>
guest 22.04.2017 21:31 # 0
<a href=" http://acheteramoxicillinepascherenfrance.com/ ">achat amoxicilline sans ordonnance </a>
guest 22.04.2017 21:31 # 0
<a href=" http://acheteramoxicilline500enligne.com/ ">acheter amoxicilline 500 en ligne </a>
Antervis 18.04.2017 19:03 # 0
тут компилятор эту проверку должен вообще выкинуть, оставив только printf("impossible");*
можно будет подобные вещи делать на контрактах. Скажем, функция гарантирует, что при правильном использовании массив отсортирован. Но не в автоматическом режиме.
guestinh0 15.04.2017 00:18 # −5
P. S. Не анскилябры, а цори.
j123123 15.04.2017 01:08 # 0
bormand 15.04.2017 07:52 # −23
Этот код попадает в critical path JIT'а или интепретатора, чтобы задумываться об оптимальности?
Так то генереция инструкций - не самая ресурсоёмкая часть конпелятора. Всяко занимает на пару порядков меньше, чем оптимизации на предыдущих этапах...
j123123 15.04.2017 15:14 # 0
>Так то генереция инструкций - не самая ресурсоёмкая часть конпелятора. Всяко занимает на пару порядков меньше, чем оптимизации на предыдущих этапах...
А если я руками пишу супермегаоптимальный LLVM код на LLVM ассемблере, и для меня именно это место является причиной тормозов
А если серьезно, то просто неприятно на такое говно анскильное смотреть, особенно от разрабов компиляторов, они-то должны понимать что это будет неэффективно, делать кучу сравнений. Ладно б еще какой-нибудь питонист или похапешник такое написал
Antervis 18.04.2017 19:13 # +3
j123123 18.04.2017 19:33 # 0
Antervis 18.04.2017 20:42 # 0
j123123 18.04.2017 21:27 # 0
Dr_Stertor 18.04.2017 21:29 # −121
guestinh0 19.04.2017 21:28 # −22
CnEPMA 19.04.2017 21:40 # −1
guestinh0 19.04.2017 22:35 # −23
guestinio 15.04.2017 17:42 # −5
rss 21.04.2017 23:02 # 0
j123123 25.04.2017 15:12 # +1
dxd 25.04.2017 20:08 # +1
guest 25.04.2017 22:48 # 0
TeaBag 26.04.2017 21:50 # 0