Process stack, fkn antititotal

Stack egy módszer a memória megszervezésére.
Ez a memória tárolja az aktuálisan végrehajtó függvények, a helyi változók és a kivételkezelési keretek hívásainak sorrendjét.

Szigorúan megfogalmazva, a processzor teljes szövegének szintjén lehet dolgozni az áramláscsomóval. Más szavakkal, a processzornak vannak parancsjai: "tedd a teljes szót a veremre" és "kapd ki a teljes szót a veremről". De leggyakrabban a magas szintű nyelvek a keret szintjén dolgoznak.

A veremkeret olyan adatblokk, amely leírja egy adott időben futó alprogram futásának folyamatát. Ez magában foglalja:

A verem keret mérete dinamikusan változhat a program mûködése közben, amennyiben a köteg tetején marad. Ezen túlmenően, az egyes programozási nyelvek vannak speciális funkciók, amelyek nem hoznak létre saját kereteket, és változtassa meg a szülő - igen, a C / C ++, ez a „bűn” setjmp / longjmp és ALLOCA

Általában a verem keret által létrehozott rutin elején a dolgát (ezt nevezik „prológus” rutin), és megsemmisül a végén (ahogy nevezik - nem tudom, „epilógus”?). De például, assembly nyelvű programozó maga határozza meg a viselkedését az alprogram, valamint a magas szintű nyelvi lehetősége van arra, hogy feladja a prológ (pl __declspec (csupasz) Visual C / C ++), hogy hozzon létre egy teljes verem keret, vagy sem - határozza meg a programozó megoldás.

De van két elem, amelyek kívül esnek a programozó - az első és a második bekezdésben, mivel ők kerülnek a csomag nem hívó és hívott rutin (jól is, ha a hívott rutin őket, hogy megtanulják, hogyan kell nem verem). E két elem átvitelének részleteit egy olyan dolog határozza meg, mint egy hívásmegállapodás.

Így a hívási konvenciót cdecl, kérelmezett funkciók C és C ++ nyelven, azt jelenti, hogy a paraméterek a verem vannak elhelyezve fordított sorrendben, és letöltöttük a hívó rutin. Ez lehetővé teszi a használatát rutinok változó számú érv, mint ebben az esetben, az első paraméter felelős számos érv van a legközelebb a verem tetején, ami azt jelenti, hogy a távolság közte és a verem tetején állandó. Ez lehetővé teszi a hívott szubrutin számára, hogy megtalálja.

Amint azt eleinte elmondtam, a halmozódások nem léteznek folyamatokban, hanem szálakban. Ez annak köszönhető, hogy a különböző szálaknál a szubrutin hívási lánc teljesen más lehet. Ez nem okoz kényelmetlenséget, hanem ez egy jó dolog, mert lehetővé teszi a megvalósítása kapcsolási áramok egyszerűen cserélje ki az aktuális stack pointer, lecserélve a teljes hívási verem. A fennmaradó értékeket (például a CPU regisztereket) nem szabad kifejezetten elmenteni és kicserélni - elegendő menteni őket a veremre, majd visszaállítani azokat. Így, ha a dobott talmi biztonsági zárak markerek és másokat, a legalapvetőbb szinten az áramlás - ez csak egy mutató tárolt tetején köteg (processzor x86 - ESP regisztrálni vagy regisztrációhoz pár ss: ESP)

Kulcsszavak:

Kapcsolódó cikkek