Вот решил написать в этом разделе хоть одну темку. На asm-е давненько уже не кодирую, разве что для сверх оптимизации с приминением MMX, SSE и 3DNow!. Почему сверх? Да потому, что самая эффективная оптимизация - это оптимизация алгоритма. Но ближе к теме: недавно я столкнулся с такой вот интересной интерпретацией одного и того же тестового кода, но на разных языках:
Результат этого кода на C# 2.0 с компилятором MS csc:Код:int i = 2; int res = ++i + i++;
res = 7
Резульат на C++ 8.0 с родным компилятором от MS:
res = 8 !!!
В чем же дело? Дизассемблируем и посмотрим:
C++:
C#:Код:mov edi, 2 inc edi inc edi lea eax, [edi+edi] ; Любопытно. Складываются два указателя! mov ebp, eax
И кто здесь прав?Код:mov esi,2 inc esi mov edi,esi inc esi add edi,esi mov ebx,edi


LinkBack URL
About LinkBacks
Ответить с цитированием

Социальные закладки