Típusok és változók

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.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.