Ez a hatékonyság vagy növ EAX add eax, 1 verem túlcsordulás orosz
Elkezdte tanulmányozni a szerelő tudja, C / C ++. Szóval úgy döntött, hogy a tudat, hogy már ott van, és elkezdtem szétszedni az írásbeli kódot, és látni, hogy hogyan működik.
És azonnal belebotlottam egy logikátlan pillanatban.
Amennyiben a szerelvény függvénye értékének növelése az érvelés inc EAX. akkor különböznek, hogy 1 a nyilvántartáshoz add eax, 1.
Általában feltételezik, hogy ha vannak olyan funkciók, mint hogy azok hatékonyabbak. de ha megnézed a kódot i ++:
Mi jobb használni: inc, vagy add ebben az esetben?
Azt hiszem, a fordító egy bolond. Valószínűleg befolyásolja az a tény, hogy elméletileg az eredmény i ++ továbbra is használható, majd azért, mert, hogy ő megpróbálja megmenteni az eredményt az r \ EAX. Tény, hogy a fordító képes generálni
Ezen kívül, ott egyértelműen mint három utasítás egy helyett, és ez minden bizonnyal lassabb (kivéve, ha a értéke i ++ nem szükséges, akkor).
Ami a konkrét összehasonlítás add eax, 1 és inc EAX, akkor gyanítom, hogy a különbség a sebesség nem, de ez a szám 1 sor kerül, ami azt jelenti, hogy sor kerül a sorban előzetes letöltési kódot, és játszhat negatív szerepet. És nem tud játszani.
Másrészt, a fordító használ egy igazán kemény add eax, 1:
Ez ad az eredmény nélkül inc'a
Másrészt, a Java JIT-fordító használ néha inc. látta ..
Nos, a kérdés, persze, azt kérdezik! Ez annyira vas-függő dolog!
Az általános szabály egyszerű: mind a generáció egy szerelő fordító mindig okosabb kód (tudatosság), mint te. Ha így tesz, akkor jobb lenne.
Második gondolat: Ön alapuló hamis ígéretet. Az új gép az utasítások be nem mindig diktálta a számítási hatékonyság. Van még olyan dolog, mint a programozó hatékonyság - egyetértenek abban, inc EAX írni sokkal könnyebb, mint hozzá eax, 1.). És működése rendkívül gyakori.
Most miért adjunk gyorsabban inc. (Minden Írok nem szükséges, hogy igaz legyen - Csak azt hiszem). Az a tény, hogy a inc. Ellentétben add. Ez nem változtat az állam a carry flag. Néhány más zászlók változik. Mivel nem vagyok tisztában olyan architektúra, amellyel lehetővé válik, hogy a zászlókat egyenként, sem együtt, próbálom a következő adatokat: inc „első meg kell vizsgálni a jelenlegi állapotában a carry flag (ami okot ad hamis kapcsolata a későbbi fennakadást a szállítószalag). És add „benne nem szükséges, mert felülírja. Ezért a teljesítmény-növekedést.
Ui Fontos ismét: Én ezt nem nagyon jó még megérteni (kontakt hat hónappal később - úgy tűnik, az idő vagyok szakértő ezen a területen =)). Csak valahol valami ilyesmi hallott \ olvasni.
Válaszol február 14 '11 at 21:57
gcc (GCC) 3.4.5 (mingw-vista speciális r3)
Bruttó használ i ++ j ++
összeállításakor a -O3 ez általában megtartja változók nyilvántartásokban. gcc -S -O3
így (az időre) Kód:
Ami a végrehajtási sebesség. Személy szerint úgy gondolom, hogy az x86-végrehajtási sebességet egy ciklikus kód, egy elfogadható mérete a modern építészet végrehajtása, mint amilyennek látszik első pillantásra úgy néz ki, ugyanaz. Ez annak köszönhető, hogy előzetes letöltési parancsokat és átalakítjuk a parancsok RISC-szerű processzor mag.