HTML

gondolataim elsősorban játékfejlesztésről

Elsősorban játékfejlesztés magyarul: az enginem fejlesztése során felmerülő problémák, ötletek, tévutak stb dokumentálása, amely számomra és talán mások számára is hasznos lehet később Másodsorban gondolatok szavakban...

Kapcsolat:
aalberik 'at' gmail 'dot' com

Haletető

Galéria

Címkék

Összes

Linkblog

Naptár

december 2024
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

lenni vagy nem lenni avagy hasonlítsunk nullával

2009.04.23. 19:14 :: syam

Vajon melyik megoldás a gyorsabb ha 32 bites integerekkel számolunk:

  1. result = (!a);
  2. result = (a == 0)

A választ disasm után kaphatjuk meg:

 

1.

005F775E xor eax,eax
005F7760 cmp dword ptr [ebp-18h],0
005F7764 sete al
005F7767 mov dword ptr [ebp-24h],eax

2.

005F7781 xor eax,eax
005F7783 cmp dword ptr [ebp-18h],0
005F7787 sete al
005F778A mov dword ptr [ebp-30h],eax

Vagyis MSVC++-szal fordítva, mindkét kód ugyanazt hajtja végre.

Most pedig nézzük ezt az esetet másképp:

  1. if( !i ) { ... }
  2. if( i==0 ) { ... }

1.

005F7747  cmp         dword ptr [ebp-18h],0
005F774B  jne         main+54h (5F7754h)

2.

005F7754  cmp         dword ptr [ebp-18h],0
005F7758  jne         main+61h (5F7761h)
Vagyis a két változat most is megegyezik.

 

Utoljára nézzük az utóbbi eset ellentétét:

  1. if( i) { ... }
  2. if( i>0 ) { ... }

1.

0044D4E1  cmp         dword ptr [ebp-18h],0
0044D4E5  je          main+5Eh (44D4EEh)

2.

0044D4EE  cmp         dword ptr [ebp-18h],0
0044D4F2  jle         main+6Bh (44D4FBh)

Az összes eset ugyanarra a kódra fordul vagyis nem érdemes trükközni.

Szólj hozzá!

A bejegyzés trackback címe:

https://sakura7.blog.hu/api/trackback/id/tr971081844

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása