Kezdőoldal » Számítástechnika » Programozás » Feltételvizsgálat módszerek?

Feltételvizsgálat módszerek?

Figyelt kérdés

Az első feltétel mindig if, és ez a legnagyobb eséllyel bekövetkező legyen.


Ha csak egy eredménye kell, akkor a többi else if, a legutolsó pedig else, és a legkisebb esélyű.


Személy szerint én ezeket használom, legalábbis elvileg kicsit gyorsíthatnak a kódon. De ez mind csak saját ötlet.

Van még pár ötletem, de nem értek hozzá, ezért is a kérdés.


Talán érdemes az if - else if párokat egymás után rakni, amik logikailag ugyan azt vizsgálják, amennyiben csak egy feltételtől függ az else if?

if

else if

if

else if

....


Ez összetettebb kódnál gondot okozhat, eddig még nem igazán használtam.


2020. nov. 30. 21:18
 1/2 anonim ***** válasza:
93%
Teljesen értelmetlen ezen agyalni, mert ettől nem lesz gyorsabb a program. Ha mégis, akkor majd foglalkozol vele az optimalizáláskor, de várhatóan egy ilyen programban nem a feltételek sorrendjének megvariálása fog gyorsulást okozni.
2020. nov. 30. 21:35
Hasznos számodra ez a válasz?
 2/2 anonim ***** válasza:
41%

Hogy ez a fajta megoldás gyorsít-e a kódon, az a fordítón és azon az architektúrán múlik, amelyen a kód futni fog.

Egy feltételvizsgálat általában úgy van megvalósítva, hogy mindkét ág jump-ol valahova, tehát érdemi sebességnövekedés nem következik be, mert ha már ugrani kell, akkor szinte mindegy, hogy hova.


A dolog azért mégsem olyan egyszerű.

Ezt az is bizonyítja, hogy pl. az x86 valós módjában a memória szegmentált, egy /valamelyik/ 64 kByte-os szegmensben fut a kód, és a jump utasítás lehet un. far jump is, ami azt jelenti, hogy az ugrás olyan címre mutat, ami egy másik szegmensben van. Ekkor érdemi sebesség csökkenés következik be, mivel a processzornak szegmenst kell váltania és az új szegmens azon címére kell adnia a vezérlést, amire a far jump mutat.

Ha nem volna far jump csak sima /ez szegmensen belüli címre mutat/, akkor nyilván nem kéne szegmens váltással is tökölnie a CPU-nak. Kérdés, hogy ki ír manapság x86-ra valós módú programot? Pláne olyat, aminek a kódja egynél több szegmenst igényel.

Vannak még ilyenek, de hogy nem sokan, az garantált. Millióból az egy. Nagyságrendileg.


Akkor valósulhat meg általánosságban, módtól, cpu-tól szinte függetlenül érdemi sebesség-különbség, ha a feltételvizsgálatot úgy valósítja meg a fordító, hogy a feltétel bekövetkezésekor ugrik csak, egyébként folytatja a soron következő /nyilván jumpless/ utasítás szekvencia végrehajtását.

Ebben az esetben a terheltebb kódrészek számottevő sebességnövekedést produkálhatnak. Prímteszt, stb.


A többi ötleteddel is előhozakodhatnál. Kiváncsi lennék rájuk.

2020. dec. 1. 09:26
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!