Из рунета:
Вот небольшой кусок тестового плагина
Код:
new alive[ 33 ];
new bits_alive;
public alive ( id )
{
alive[ id ] = true;
#emit break;
bits_alive |= 1 << ( id - 1 );
#emit break
}
а вот его дизассемблированный код
Код:
PROC alive
zero.alt
; 2
load.s.pri 0xC ; 3
bounds 0x20; 4
idxaddr &
amp;
nbsp; ; 2
move.alt
; 2
const.pri 0x1 ; 2
stor.i &a
mp;n
bsp; ; 10
&n
bsp; ; 25
load.pri 0x84 ; 3
push.pri
; 3
load.s.pri 0xC ; 3
add.c -0x1
;
;; 3
const.alt 0x1 ; 2
xchg &
;nbs
p; ; 3
shl
; ; 6
pop.alt &
amp;
nbsp; ; 4
or
; 3
stor.pri 0x84 ; 3
&n
bsp; ; 33
ENDP
как видно строка alive[ id ] = true выполняется в семь операций, а bits_alive |= 1 << ( id - 1 ) в 10 операций.
Цифры после ; это кол-во операций ассемблера (можно посмотреть в исходниках amxx файл amxexecn.asm), даже тут булевая операция выигрывает (25 против 33 комманд).