Re[7]: Ассемблер для Andrew S
От: remark Россия http://www.1024cores.net/
Дата: 03.04.07 10:43
Оценка:
Здравствуйте, Andrew S, Вы писали:

R>>>>з.ы. а мерить среднее время всё-таки некорректно, если ты запустишь тест несколько раз, то увидишь, что время "плавает", т.е. сказываются третьи факторы, с минимальным временем такого нет.


AS>>>Поэтому и надо ставить приоритет реалтайм и привязывать к одном процессору, как тут уже говорили. Еще и рабочую область неплохо бы закоммитить.


R>>Если мерить длинный интервал и запускать функцию _один_ раз, то да. В моём случае всё это учтено, поэтому ничего этого не надо — это никак не повлияет на результат.


AS>Ладно, ладно, мы все тупые, а ты один умный. Делай как знаешь


Сейчас сколько бы раз я не запускал тест у меня получается, допустим 172.
Т.е. ты хочешь сказать, если я запущу свой тест на своей машине с привязкой к ядру, с установкой максимального приоритета, коммитом памяти и т.д., у меня выдастся другое число?



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: [Investigation] Exceptions vs. Return Values
От: Erop Россия  
Дата: 03.04.07 10:45
Оценка:
Здравствуйте, remark, Вы писали:

R>Что я понял уже когда я это всё доделал, что надо было код не кустарным способом делать, а сделать генератор кода, которому задаёшь параметр — кол-во "ресурсов, кол-во уровней вызовов и т.д. и что бы он генерировал много красивого кода. И снабдить это ещё скриптами для автоматической сборки и что бы результаты выводились сразу в виде красивых табличек. Тогда бы я это выложил и все желающие запускали бы это на своих платформах и потом выкладывали бы сюда свои результаты... тогда и для ARM'ов бы можно было протестировать и более точно проследить зависимости скорости/размера кода от различных параметров типа кол-ва "ресурсов".


R>К сожалению это не ко мне. Может руки дойдут это оформить в виде набора файлов, который можно запустить на своей платформе и выложить результаты...


Ну ты, например, можешь выложить то, что есть, а руки могут дойти у кого-то ещё
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Ассемблер для Andrew S
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.04.07 10:46
Оценка:
R>>>>>з.ы. а мерить среднее время всё-таки некорректно, если ты запустишь тест несколько раз, то увидишь, что время "плавает", т.е. сказываются третьи факторы, с минимальным временем такого нет.

AS>>>>Поэтому и надо ставить приоритет реалтайм и привязывать к одном процессору, как тут уже говорили. Еще и рабочую область неплохо бы закоммитить.


R>>>Если мерить длинный интервал и запускать функцию _один_ раз, то да. В моём случае всё это учтено, поэтому ничего этого не надо — это никак не повлияет на результат.


AS>>Ладно, ладно, мы все тупые, а ты один умный. Делай как знаешь


R>Сейчас сколько бы раз я не запускал тест у меня получается, допустим 172.

R>Т.е. ты хочешь сказать, если я запущу свой тест на своей машине с привязкой к ядру, с установкой максимального приоритета, коммитом памяти и т.д., у меня выдастся другое число?

Вполне вероятно. Особенно если ты увеличишь количество итераций. Привязка к ядру — но ты же не только на своей машине планируешь запускать тест, ведь так?
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[6]: Ассемблер для Andrew S
От: CreatorCray  
Дата: 03.04.07 11:15
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>>>А можете привести листинги для функций? Вдруг ic там что проинлайнил? Он может....

CC>>если указывать __declspec(noinline) — то не будет гарантировано.
CC>>Впрочем вот:

AS>Cудя по коду для rv, icc убрал вызовы ctor и dtor. Мы договорились этого не делать

Увы, заставить его не убирать совершенно пустые функции не получается... Щас проведу эксперимент — добавлю _asm nop в них
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Ассемблер для Andrew S
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.04.07 11:18
Оценка:
AS>>>>А можете привести листинги для функций? Вдруг ic там что проинлайнил? Он может....
CC>>>если указывать __declspec(noinline) — то не будет гарантировано.
CC>>>Впрочем вот:

AS>>Cудя по коду для rv, icc убрал вызовы ctor и dtor. Мы договорились этого не делать

CC>Увы, заставить его не убирать совершенно пустые функции не получается... Щас проведу эксперимент — добавлю _asm nop в них

Используй тот код, что приводил я (c init\release). В этом случае не должно убрать — если только линкер не оптимизирует.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[8]: Ассемблер для Andrew S
От: CreatorCray  
Дата: 03.04.07 11:45
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>>>>>А можете привести листинги для функций? Вдруг ic там что проинлайнил? Он может....

CC>>>>если указывать __declspec(noinline) — то не будет гарантировано.
CC>>>>Впрочем вот:

AS>>>Cудя по коду для rv, icc убрал вызовы ctor и dtor. Мы договорились этого не делать

CC>>Увы, заставить его не убирать совершенно пустые функции не получается... Щас проведу эксперимент — добавлю _asm nop в них

AS>Используй тот код, что приводил я (c init\release). В этом случае не должно убрать — если только линкер не оптимизирует.

Кинь ссылкой плз, бо в этом топике уже черт ногу сломит.
Скомпилил с nop-ами — получилось одинаково у обоих — 182
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Ассемблер для Andrew S
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.04.07 12:13
Оценка:
AS>>Используй тот код, что приводил я (c init\release). В этом случае не должно убрать — если только линкер не оптимизирует.
CC>Кинь ссылкой плз, бо в этом топике уже черт ногу сломит.

http://www.rsdn.ru/Forum/Message.aspx?mid=2430252&amp;only=1
Автор: Andrew S
Дата: 03.04.07

В конце сообщения.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[7]: Ассемблер для Andrew S
От: minorlogic Украина  
Дата: 03.04.07 12:13
Оценка: -2
Здравствуйте, Andrew S, Вы писали:

AS>Ладно, ладно, мы все тупые, а ты один умный. Делай как знаешь


Должен заметить, что полезную информацию дал пока что только Ремарк. От вас , кроме НЕконструктивной критики пока не было ничего.
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[8]: Ассемблер для Andrew S
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.04.07 12:19
Оценка: -1
AS>>Ладно, ладно, мы все тупые, а ты один умный. Делай как знаешь

M>Должен заметить, что полезную информацию дал пока что только Ремарк. От вас , кроме НЕконструктивной критики пока не было ничего.


А от вас пока ничего, кроме флуда (хотя нет, была ссылка на статью про книгу криса касперски, и то не по адресу). Есть что по делу то сказать?
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[10]: Ассемблер для Andrew S
От: CreatorCray  
Дата: 03.04.07 12:54
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>>>Используй тот код, что приводил я (c init\release). В этом случае не должно убрать — если только линкер не оптимизирует.

CC>>Кинь ссылкой плз, бо в этом топике уже черт ногу сломит.

AS>http://www.rsdn.ru/Forum/Message.aspx?mid=2430252&amp;only=1
Автор: Andrew S
Дата: 03.04.07

Пасиб
правда все равно пришлось nop и __declspec(noinline) вставить...

test_ex: 180
test_rv: 180



?test_rv@@YA_NXZ    PROC NEAR PRIVATE
$B3$1:                          ; Preds $B3$0
;;; {
$LN119:
        push      ebp                                           ;67.1
        sub       esp, 16                                       ;67.1
$LN120:
;;;     tobj1 o1, o2, o3, o4;
;;;     bool res = false;
;;;     if (o1.init())
        lea       ecx, DWORD PTR [esp+12]                       ;70.9
        call      ?init@tobj1@@QAEHXZ                           ;70.9
                                ; LOE eax ebx esi edi
$B3$2:                          ; Preds $B3$1
$LN121:
        test      eax, eax                                      ;70.2
        jne       $B3$5         ; Prob 5%                       ;70.2
                                ; LOE ebx esi edi
$B3$3:                          ; Preds $B3$2
        xor       ebp, ebp                                      ;
                                ; LOE ebx ebp esi edi
$B3$4:                          ; Preds $B3$8 $B3$3
$LN122:
;;;     {
;;;         if (o2.init())
;;;         {
;;;             if (o3.init())
;;;             {
;;;                 if (o4.init())
;;;                 {
;;;                     res = test_rv2() && test_rv2() && test_rv2() && test_rv2();
;;;                     o4.release();
;;;                 }
;;;                 o3.release();
;;;             }
;;;             o2.release();
;;;         }
;;;         o1.release();
;;;     }
;;;     return res;
        mov       eax, ebp                                      ;87.9
        add       esp, 16                                       ;87.9
        pop       ebp                                           ;87.9
        ret                                                     ;87.9
                                ; LOE
$B3$5:                          ; Preds $B3$2                   ; Infreq
$LN123:
        lea       ecx, DWORD PTR [esp+8]                        ;72.10
        call      ?init@tobj1@@QAEHXZ                           ;72.10
                                ; LOE eax ebx esi edi
$B3$6:                          ; Preds $B3$5                   ; Infreq
$LN124:
        test      eax, eax                                      ;72.3
        jne       $B3$9         ; Prob 5%                       ;72.3
                                ; LOE ebx esi edi
$B3$7:                          ; Preds $B3$6                   ; Infreq
        xor       ebp, ebp                                      ;
                                ; LOE ebx ebp esi edi
$B3$8:                          ; Preds $B3$12 $B3$7            ; Infreq
$LN125:
        lea       ecx, DWORD PTR [esp+12]                       ;85.6
        call      ?release@tobj1@@QAEXXZ                        ;85.6
        jmp       $B3$4         ; Prob 100%                     ;85.6
                                ; LOE ebx ebp esi edi
$B3$9:                          ; Preds $B3$6                   ; Infreq
$LN126:
        lea       ecx, DWORD PTR [esp+4]                        ;74.11
        call      ?init@tobj1@@QAEHXZ                           ;74.11
                                ; LOE eax ebx esi edi
$B3$10:                         ; Preds $B3$9                   ; Infreq
$LN127:
        test      eax, eax                                      ;74.4
        jne       $B3$13        ; Prob 5%                       ;74.4
                                ; LOE ebx esi edi
$B3$11:                         ; Preds $B3$10                  ; Infreq
        xor       ebp, ebp                                      ;
                                ; LOE ebx ebp esi edi
$B3$12:                         ; Preds $B3$26 $B3$11           ; Infreq
$LN128:
        lea       ecx, DWORD PTR [esp+8]                        ;83.7
        call      ?release@tobj1@@QAEXXZ                        ;83.7
        jmp       $B3$8         ; Prob 100%                     ;83.7
                                ; LOE ebx ebp esi edi
$B3$13:                         ; Preds $B3$10                  ; Infreq
$LN129:
        lea       ecx, DWORD PTR [esp]                          ;76.12
        call      ?init@tobj1@@QAEHXZ                           ;76.12
                                ; LOE eax ebx esi edi
$B3$14:                         ; Preds $B3$13                  ; Infreq
$LN130:
        test      eax, eax                                      ;76.5
        jne       $B3$16        ; Prob 22%                      ;76.5
                                ; LOE ebx esi edi
$B3$15:                         ; Preds $B3$14                  ; Infreq
        xor       ebp, ebp                                      ;
        jmp       $B3$26        ; Prob 100%                     ;
                                ; LOE ebx ebp esi edi
$B3$16:                         ; Preds $B3$14                  ; Infreq
$LN131:
        call      ?test_rv2@@YAHXZ                              ;78.12
                                ; LOE eax ebx esi edi
$B3$17:                         ; Preds $B3$16                  ; Infreq
        test      eax, eax                                      ;78.12
        je        $B3$22        ; Prob 78%                      ;78.12
                                ; LOE ebx esi edi
$B3$18:                         ; Preds $B3$17                  ; Infreq
$LN132:
        call      ?test_rv2@@YAHXZ                              ;78.26
                                ; LOE eax ebx esi edi
$B3$19:                         ; Preds $B3$18                  ; Infreq
        test      eax, eax                                      ;78.26
        je        $B3$22        ; Prob 78%                      ;78.26
                                ; LOE ebx esi edi
$B3$20:                         ; Preds $B3$19                  ; Infreq
$LN133:
        call      ?test_rv2@@YAHXZ                              ;78.40
                                ; LOE eax ebx esi edi
$B3$21:                         ; Preds $B3$20                  ; Infreq
        test      eax, eax                                      ;78.40
        jne       $B3$23        ; Prob 22%                      ;78.40
                                ; LOE ebx esi edi
$B3$22:                         ; Preds $B3$19 $B3$17 $B3$21    ; Infreq
$LN134:
        xor       ebp, ebp                                      ;78.6
        jmp       $B3$25        ; Prob 100%                     ;78.6
                                ; LOE ebx ebp esi edi
$B3$23:                         ; Preds $B3$21                  ; Infreq
$LN135:
        call      ?test_rv2@@YAHXZ                              ;78.54
                                ; LOE eax ebx esi edi
$B3$24:                         ; Preds $B3$23                  ; Infreq
        mov       edx, 1                                        ;78.54
        cmp       eax, 0                                        ;78.54
        mov       ebp, 0                                        ;78.54
        cmovne    ebp, edx                                      ;78.54
                                ; LOE ebx ebp esi edi
$B3$25:                         ; Preds $B3$24 $B3$22           ; Infreq
$LN136:
        lea       ecx, DWORD PTR [esp]                          ;79.9
        call      ?release@tobj1@@QAEXXZ                        ;79.9
                                ; LOE ebx ebp esi edi
$B3$26:                         ; Preds $B3$25 $B3$15           ; Infreq
$LN137:
        lea       ecx, DWORD PTR [esp+4]                        ;81.8
        call      ?release@tobj1@@QAEXXZ                        ;81.8
        jmp       $B3$12        ; Prob 100%                     ;81.8


?test_rv2@@YAHXZ    PROC NEAR
$B5$1:                          ; Preds $B5$0
;;; {
$LN141:
$LN142:
;;;     return (!!++counter);
        mov       edx, DWORD PTR ?counter@@3HC                  ;46.14
        add       edx, 1                                        ;46.14
        mov       DWORD PTR ?counter@@3HC, edx                  ;46.14
        mov       eax, 0                                        ;46.14
        mov       ecx, 1                                        ;46.14
        cmovne    eax, ecx                                      ;46.14
        ret                                                     ;46.14


?release@tobj1@@QAEXXZ    PROC NEAR
; parameter 1(this): ecx
$B4$1:                          ; Preds $B4$0
;;; {
                                ; LOE ebx ebp esi edi
$B4$5:                          ; Preds $B4$1
; Begin ASM
$LN138:
$LN139:
;;;     _asm nop;
        nop                                                     ;63.7
; End ASM
                                ; LOE ebx ebp esi edi
$B4$2:                          ; Preds $B4$5
;;; }
$LN140:
        ret                                                     ;64.1

?init@tobj1@@QAEHXZ    PROC NEAR
; parameter 1(this): ecx
$B40$1:                         ; Preds $B40$0
                                ; LOE ebx ebp esi edi
$B40$5:                         ; Preds $B40$1
; Begin ASM
$LN1042:
$LN1043:
        nop                                                     ;58.7
; End ASM
                                ; LOE ebx ebp esi edi
$B40$2:                         ; Preds $B40$5
$LN1044:
        mov       eax, 1                                        ;59.9
        ret                                                     ;59.9
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: [Investigation] Exceptions vs. Return Values
От: Programador  
Дата: 03.04.07 13:54
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, <Аноним>, Вы писали:


А>>1 — передача адреса без чтония памяти. la заместо mov


GN>Имеется ввиду команда lea? Не пойму, как она может быть лучше.



А>>2 — Может E(ABCD)X кончильсь, а указатели остались.


GN>Указатели, как и данные, могут храниться в любом регистре.


Хранение данных в индексных регистрах несколько ограничивает возможные операции, хоть бывает это оправдано. Насчет lea я имел ввиду случай когда можно получить адрес а переменная прямо сейчас не понадобится или например может вообще не понадобится в зависимости от условий. Lea использует например this, который в регистре и константный офсет а реального чтения не происходит изза значений флагов.

В приведенных кодах некоторое сомнение вызывает сочетание __declspec и __fastcall

Кстати тут недавно кто-то volatile использовал для борьбы с компилятором
Re[5]: [Investigation] Exceptions vs. Return Values
От: CreatorCray  
Дата: 03.04.07 14:38
Оценка:
Здравствуйте, Programador, Вы писали:

P>В приведенных кодах некоторое сомнение вызывает сочетание __declspec и __fastcall

Чем?
__declspec(noinline) запрещает компилеру инлайнинг данной функции
__fastcall грит компилеру чтоб старался передавать параметры через регистры

все для чего это тут надо — чтоб компилер не выкидывал пустые функции а тратил на их вызов тики
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Ассемблер для Andrew S
От: remark Россия http://www.1024cores.net/
Дата: 03.04.07 14:53
Оценка: -1
Здравствуйте, Andrew S, Вы писали:

R>>Сейчас сколько бы раз я не запускал тест у меня получается, допустим 172.

R>>Т.е. ты хочешь сказать, если я запущу свой тест на своей машине с привязкой к ядру, с установкой максимального приоритета, коммитом памяти и т.д., у меня выдастся другое число?

AS>Вполне вероятно. Особенно если ты увеличишь количество итераций.


Интересно за счёт чего? И ты ещё говорил о компетентности

AS>Привязка к ядру — но ты же не только на своей машине планируешь запускать тест, ведь так?


При чём тут, что я планирую. Я запускал на однопроцессорной машине. Если я запланирую запускать ещё где-то, то тогда я возможно запланирую и изменить методику измерения, если это будет нужно.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[10]: Ассемблер для Andrew S
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.04.07 15:12
Оценка: -1
R>>>Сейчас сколько бы раз я не запускал тест у меня получается, допустим 172.
R>>>Т.е. ты хочешь сказать, если я запущу свой тест на своей машине с привязкой к ядру, с установкой максимального приоритета, коммитом памяти и т.д., у меня выдастся другое число?

AS>>Вполне вероятно. Особенно если ты увеличишь количество итераций.


R>Интересно за счёт чего? И ты ещё говорил о компетентности


За счет того, что шедуллер будет выделять больше времени твоему потоку. Или ты думаешь, в системе один поток и он твой?
Это во-первых. А во-вторых, о компетентности прямо я не говорил (хотя и советовал тебе ознакомиться хотя бы со статьей, приведенной в топике), но теперь могу наверное и начать

AS>>Привязка к ядру — но ты же не только на своей машине планируешь запускать тест, ведь так?


R>При чём тут, что я планирую. Я запускал на однопроцессорной машине. Если я запланирую запускать ещё где-то, то тогда я возможно запланирую и изменить методику измерения, если это будет нужно.


Ууу.. все ясно. Ок, уговорил — больше в таком "интересном" варианте мне общаться не хочется. Конструктива с твоей стороны я не вижу, хотя привел уже несколько ошибок в твоем тесте, ты, похоже, считаешь, что все в порядке. На критику ты реагируешь тоже весьма "интересно". В общем, желаю удачи и доработать тесты хотя бы до вменяемого состояния
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[6]: [Investigation] Exceptions vs. Return Values
От: Programador  
Дата: 03.04.07 15:34
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Programador, Вы писали:


P>>В приведенных кодах некоторое сомнение вызывает сочетание __declspec и __fastcall

CC>Чем?
CC>__declspec(noinline) запрещает компилеру инлайнинг данной функции
CC>__fastcall грит компилеру чтоб старался передавать параметры через регистры

CC>все для чего это тут надо — чтоб компилер не выкидывал пустые функции а тратил на их вызов тики


там был импортный __declspec и у него баг случился — при оптимизации параметры в стек засунулись, а не в регистры.

У меня такое отношение что __fastcall это типа инлайне. Хотя в принципе экспорт можно подружить с инлайне путем дублирования кода
Re[7]: [Investigation] Exceptions vs. Return Values
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.04.07 15:48
Оценка: +1
P>У меня такое отношение что __fastcall это типа инлайне. Хотя в принципе экспорт можно подружить с инлайне путем дублирования кода

Отчего ж? Из кернела экспортируются функции с конвенцией fastcall — и ничего, все работает Фасткалл — это конвенция вызова и ничего более — к экспорту\импорту она не должна иметь отношения, кроме как для манглинга...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[5]: [Investigation] Exceptions vs. Return Values
От: gear nuke  
Дата: 04.04.07 01:34
Оценка:
Здравствуйте, Programador, Вы писали:

P>Хранение данных в индексных регистрах несколько ограничивает возможные операции, хоть бывает это оправдано.


В x86-32 нет индексных регистров, все равноправны.

P>Насчет lea я имел ввиду случай когда можно получить адрес а переменная прямо сейчас не понадобится или например может вообще не понадобится в зависимости от условий. Lea использует например this, который в регистре и константный офсет а реального чтения не происходит изза значений флагов.


Если чтения нет — компилятор не справился с оптимизацией, сгенерировав лишние команды. Если чтение есть — нет разницы в скорости.

Компилятор для ссылки довольно часто может обойтись вообще compile-time вычислениями, не генерируя код, но делает так не всегда.

P>В приведенных кодах некоторое сомнение вызывает сочетание __declspec и __fastcall


Это правильно, поскольку функция экспортируется именно так.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: [Investigation] Exceptions vs. Return Values
От: gear nuke  
Дата: 04.04.07 01:34
Оценка:
Здравствуйте, remark, Вы писали:

R>Ну под дебагом-то что код смотреть?


Баги кодогенератора проявились в дебаге, в релизе просто повезло в конкретном случае.

R>Ты приведи пример, где под релизом так.


На коде небольшого размера не получается воспроизвести, а оставить как есть в продакшене и потом ждать багрепорты об ошибке 2го порядка довольно накладно.

R>В msvc помогает "добить" такие места, где не идельная оптимизация, включение link-time code generation — он как раз вот такие "форварды" должен элиминировать.


Я проводил довольно простой тест — сначала заинклудил все cpp в основной и скомпелировал, потом компелировал по-раздельности и линковал с /LTCG — в последнем случае код хуже.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: [Investigation] Exceptions vs. Return Values
От: gear nuke  
Дата: 04.04.07 01:46
Оценка:
Здравствуйте, remark, Вы писали:

R>Ну так исключение всё равно может полететь, и деструкторы есть, значит фрейм всё равно надо устанавливать.


Тем более, эти результаты неверны, это уже с++/rv+ex какой-то.

R>>>А код С++ компилятор даже лучше генерирует — поскольку деструкторы не вызываются явно у него есть некая свобода в оптимизации.


GN>>Не верю Компилятор там один и тот же.


R>В С — там код более явный, поэтому у компилятора меньше свободы, а в С++ менее явный — и у компилятора больше свободы.


Интересная теория, я всегда считал что С и С++ перед оптимизацией трансформируется в одно и тоже ADT.

R>Я глядел сгенерированный код "с++/rv" — я там даже сразу не понял, что он там к чему нагенерил — там он как-то хитро пишет прям в стек, т.е. не push/pop, а mov [sp],x и всякого такого рода вещи.


При оптимизации по скорости так происходит довольно часто.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: [Investigation] Exceptions vs. Return Values
От: Programador  
Дата: 04.04.07 08:45
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Programador, Вы писали:


P>>Хранение данных в индексных регистрах несколько ограничивает возможные операции, хоть бывает это оправдано.


GN>В x86-32 нет индексных регистров, все равноправны.


Равноправны 2 регистра FS и GS это совсем не все


P>>Насчет lea я имел ввиду случай когда можно получить адрес а переменная прямо сейчас не понадобится или например может вообще не понадобится в зависимости от условий. Lea использует например this, который в регистре и константный офсет а реального чтения не происходит изза значений флагов.


GN>Если чтения нет — компилятор не справился с оптимизацией, сгенерировав лишние команды. Если чтение есть — нет разницы в скорости.


GN>Компилятор для ссылки довольно часто может обойтись вообще compile-time вычислениями, не генерируя код, но делает так не всегда.

Я про рунтайм условия. Мы загружаем адрес, а память возможно не читаем, засчет этого ссылка на инт может быть быстрее
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.