Форум: "Потрепаться";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
ВнизХороший водитель может и не знать о том как устроен движек, но классным гонщиком при таком подходе он ни когла не станет!!! Найти похожие ветки
← →
Алексей Петров (2002-02-19 10:09) [8]> VuDZ © (17.02.02 14:08)
> что быстрее:
Вопрос далеко не однозначен.
1) Где вы взяли второй код? Компилятор Delphi у меня сделал сравнение таким:
test al, al
jnz @m
mov eax,1
ret
@m:
or eax, -1
ret
Это ничуть не медленнее Вашего первого варианта, но на 3 байта короче него :)
Этот код, правда, получен при регистровом соглашении о вызовах процедуры - но кому в голову придет при вызове "очень много раз в секунду" использовать cdecl?
2) Учитывая архитектурные особенности CPU начиная с i486 и выше,
код
mov al, BYTE PTR [esp+4]
test al, al
будет выполняться практически с такой же скоростью, что
push ebp
mov ebp, esp
mov eax, DWORD PTR [ebp]
Это связано с тем, что использования регистра esp, да еще и со смещением - очень длительная операция (2-3 такта, в зависимости от предшествующих команд. В данносм случаи будет 3, если только выполнен вызов функции).
Комманды же push ebp; mov ebp, esp в паре выполнятся за 1 такт, а последующий mov - за 1 или 2 - как конвеер сработает.
==========================
Я прекрасно знаю ассемблер, но считаю, что его использование в программах под Win32 оправдано крайне редко. Гораздо полезнее поработать головой в других направления: оптимизировать алгоритм, использовать подходящие к случаю соглашения о вызовах, и т.д. и т.п.
Ассемблер я использую в том случаи, когда мне не удается четко изложить свою мысль на ЯВУ так, чтоб компилятор сгенерировал оптимальный код. За все время win32 программирования я применял asm только 2 раза. И то 1 раз для выпендрежа.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c