Számítógépes kód írásakor sok mindent meg kell érteni. Minden programozási nyelv más, saját szintaxis- és struktúrákkal rendelkezik. Az egyik dolog, ami sok programozási nyelvben közös, a változók beállításának szükségessége. A változók olyan módon tárolják az adatokat, amelyekre a jövőben hivatkozni lehet.
Különböző értékeket rendelhet hozzá egy változóhoz, például szöveges karakterláncokhoz, számokhoz vagy adattömbhöz sok egyéb mellett. Sok nyelv megköveteli, hogy deklarálja, milyen típusú adatokat tárol egy változóban, amely például csak számokra korlátozza a felhasználót.
Egy másik dolog, ami különbözik a programozási nyelvek között, az, hogy deklarálni kell egy változó kiosztási típusát. Egyes nyelvek ezt nem követelik meg, míg mások szigorúak. Két fő kiosztási típus létezik: statikus és dinamikus.
Statikus kontra dinamikus
A statikus változó olyan változó, amelynek méretét az alkalmazás futtatása előtt határozzák meg. Fordítási időben állítja be a fordító. Például egy karakterlánc definiálható, amelynek határozott hossza van. A hosszú karakterlánc tárolásához szükséges memóriaterületet ezután statikusan lefoglalja a fordító.
Az alternatíva a dinamikus elosztás. Itt a változó méretét a program futás közben állítja be. A program logikát tartalmaz a változóhoz lefoglalt memória mennyiségének beállításához, lehetővé téve, hogy az idővel megváltozzon, ha több vagy kevesebb helyre van szükség. Ez általában nagyobb rugalmasságot biztosít a memóriahasználatban, mint a statikus kiosztás, de némi teljesítményköltséggel jár. A dinamikus allokáció egyik fő előnye, hogy nem kell lefoglalni, amíg nincs rá szükség. A memória felszabadítható, ha már nincs rá szükség, még akkor is, ha a program még fut.
A statikusan lefoglalt változók állandóan a memóriában tárolódnak. Ez nem jelenti azt, hogy a program nem tudja megváltoztatni a változóban tárolt értéket. Ehelyett azt jelenti, hogy a változó által elfoglalt memória mennyisége soha nem módosítható. Még ha nagy értékről kicsire változtatja is a változót, nem szabadíthatja fel a most felesleges memóriaterületet. A rendelkezésre álló hely mennyiségét sem növelheti. Ez akkor lehet probléma, ha a változót változó hosszúságú felhasználói bemenetek tárolására szánják.
Funkciók és szubrutinok
A statikus változókat a rendszer a veremben tárolja, nem pedig a kupacban. Ez azt jelenti, hogy elérhetőek maradnak abban a példányban, amelyben létrehozták őket. A statikusan lefoglalt változók a program törzsében az alkalmazás teljes futása alatt érvényesek és a memóriában maradnak. Ez azért van, mert az alkalmazás verem mindig ott van. Ha egy külön függvényt vagy osztályt hívunk meg, akkor az megkapja a rekordját a veremben, amelyben új statikusan lefoglalt változók tárolhatók. Ezeknek a változóknak a memóriája felszabadítható az osztály bezárása után, amikor a rekord kikerül a veremből.
Következtetés
A statikus lefoglalás memóriaterületet foglal le egy változó számára – a fordító rögzíti a fordítási időben szükséges helyet. Míg a változó értéke változhat, a számára lefoglalt terület mennyisége nem. Ez a korlátozás megakadályozza, hogy felszabaduljon a hely, ha nincs rá szükség. Azt is megakadályozza, hogy szükség esetén több hely álljon rendelkezésre. A statikus allokáció teljesítményelőnnyel rendelkezik a dinamikus allokációhoz képest, de kevésbé rugalmas. Általában statikus és dinamikus változókat is használnak, mivel mindkettő előnyökkel jár.