A VariablesEdit
A VariablesEdit
a változók láthatósága és élettartama eltérő lehet, attól függően, hogyan deklarálják és használják őket. A hatókör arra utal, hogy a program egy bizonyos pontján hozzáférhet egy adott változó tartalmához.
általában egy változó hatókörét a körülzáró blokk határozza meg. Egy blokk bizonyos nyelveken (begin/end, {/} Párok) kifejezetten bezárható, míg másokban a blokk implicit.
szinte minden nyelvnek van egy átfogó határoló hatóköre, és ha EGY program egy változót deklarál ebben a hatókörben, akkor globális változónak nevezik.
ezzel szemben egy helyi változó csak a blokkján belül látható vagy “hatókörben” látható.
fontolja meg ezt a kódot:
integer globalVariableglobalVariable = 5begin integer localVariable localVariable = 7 globalVariable = 8endlocalVariable = 3 /* <-- this is a syntax error */
a globális változót minden blokkon kívül deklarálják, így az (implicit) globális hatókörben van, így globális változóvá válik. a helyi változó a begin/end blokkban deklarálódik, hatókörét erre a blokkra korlátozva.
a globalVariable változó 5-ként indul, 8-at kap a blokkban, és 8-ként lép ki. Változó localVariable van rendelve 7, majd megy ki a hatókörből, mielőtt illegálisan rendelt 3. Ezen a szinten nincs változó localVariable.
a változó élettartama jelzi, ha a változó aktív. Az előző példában egy globális változó jön létre a program elején, amelynek élettartama megegyezik a program hosszával. A localVariable esetében csak a blokk kezdete után jön létre irányelv. Élete véget ér, amikor a program átadja a végirányelvet.
Dynamic memory allocationEdit
sok programnak nagyon specifikus célja van, és nagyon specifikus és kis területekre van szüksége a memóriához. Ha képfájlok olvasására szolgáló programot írnánk, nem vagyunk biztosak abban, hogy pontosan mekkora lehet a kép. Néhány lehet több száz megabájt, míg néhány lehet kilobájt vagy kevesebb. Több száz megabájt kiosztása, amelyekre nincs szükség, megnehezítené a program futtatását egyes számítógépeken, miközben a túl kevés memória kiosztása azt jelentené, hogy vannak olyan képek, amelyeket nem tudunk kezelni.
a probléma jó megközelítése a memória szükség szerinti elosztása. Ezt nevezzük dinamikus memóriaelosztásnak. Egyszerűen annyit kérünk, amennyire szükségünk van a program futása közben (nem pedig fordításkor), se többet, se kevesebbet. Példánkban ez lehetővé tenné mind a hatalmas, mind az apró képfájlok hatékony és hatékony szerkesztését. Van némi összetettség, mivel már nem a nyelv foglalkozik az elosztás részleteivel, hanem közvetlenül mi. Példánkban, ha alacsonyabb szintű számítógépen futunk, előfordulhat, hogy nincs elég memória a nagy képfájlok elhelyezéséhez, ezért ilyen helyzetekben észlelnünk kell (és esetleg kecsesen meg kell buknunk).
a dinamikus memória-allokáció a “memóriaszivárgások” fő forrása, ahol a programok kiosztják, használják, majd egy memóriaterülettel elvégzik, de nem jelölik meg újra elérhetőnek. Ezeket a problémákat nehéz lehet nyomon követni, mivel más hibákkal ellentétben a szivárgások nem nyilvánvalóak.
néhány modern nyelv beépített mechanizmusokkal rendelkezik, amelyek megpróbálják megakadályozni a memóriaszivárgást, az úgynevezett szemétgyűjtést. Ez a rendszer nyomon követi, hogy milyen allokációt használnak, ha, amikor az hatályán kívül esik. A szemétgyűjtésnek enyhe teljesítménybüntetése van, de ma már általában haladásnak tekintik. A Java és a Python például rendelkezik szemétgyűjtővel.