Programozás alapjai. 10. előadás

Hasonló dokumentumok
találhatók. A memória-szervezési modell mondja meg azt, hogy miként

Mutatók és mutató-aritmetika C-ben március 19.

8. gyakorlat Pointerek, dinamikus memóriakezelés

Adatelérés és memóriakezelés

A 32 bites x86-os architektúra regiszterei

Programozás alapjai 6. előadás. Wagner György Általános Informatikai Tanszék

Programozás alapjai. 7. előadás

Memóriakezel. riakezelés s I. A memória címzése; A memória felosztása; Abszolút változó (rádefiniálás); Memóriatömbök. dr.

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Operációs rendszerek III.

Számítógépek felépítése

Programozás alapjai. 5. előadás

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Programozási nyelvek Java

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Programozás I gyakorlat

Pénzügyi algoritmusok

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Az assembly nyelv sor-orientált nyelv, tehát minden sorba pontosan egy utasítás kerül. Egy sor mezőkből áll a következőképpen:

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Assembly programozás levelező tagozat

2017/12/16 21:33 1/7 Hardver alapok

Java és web programozás

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Máté: Assembly programozás

OOP #14 (referencia-elv)

Virtuális memóriakezelés Védelem. Memória védelem. Intel x68. Izsó Tamás október 18. Izsó Tamás Memória védelem/ 1

1. Alapok. Programozás II

Operációs rendszerek. Az NT memóriakezelése

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozott soros szinkron adatátvitel

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozási nyelvek Java

Assembly. Iványi Péter

Programozás I gyakorlat

Assembly Rekurzív függvények, EXE, C programok. Iványi Péter

Aritmetikai utasítások I.

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Programozas 1. Strukturak, mutatok

Fábián Zoltán Hálózatok elmélet

Archi2 Gyak. (Processzorok Utasításszintű Kezelése) 2014 ősz

A C programozási nyelv III. Pointerek és tömbök.

Programozás I gyakorlat

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Szegmentálás. Memória kezelési stratégia mely a felhasználó nézőpontját támogatja Például:

A C programozási nyelv III. Pointerek és tömbök.

Tamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407)

Programozás alapjai. 8. előadás

Java II. I A Java programozási nyelv alapelemei

Programozás I gyakorlat. 10. Stringek, mutatók

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Máté: Assembly programozás

Processzorok Utasításszintű Kezelése tavasz

Programozás II. 4. Dr. Iványi Péter

Bevezetés a C++ programozási nyelvbe

Érdekes informatika feladatok

2016/08/31 02:45 1/6 Hardver alapok

Assembly. Iványi Péter

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Számítógép Architektúrák

Hatékony memóriakezelési technikák. Smidla József Operációkutatási Laboratórium január 16.

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Algoritmizálás és adatmodellezés tanítása 1. előadás

Tamás Péter (D. 424) Mechatronika, Optika és Gépészeti Informatika Tanszék (D 407)

Virtuális memóriakezelés Védelem. Memória védelem. Intel X86. Izsó Tamás október 1. Izsó Tamás Memória védelem/ 1

C++ programozási nyelv

7. fejezet: Mutatók és tömbök

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Rekord adattípus. Egymásba ágyazott rekordok. With utasítás. Változó rekord. Rekord konstans

Óbudai Egyetem. C programozási nyelv

Bevezetés az informatikába

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Digitális rendszerek. Utasításarchitektúra szintje

A hibát az alábbi Python program segítségével tudjuk előidézni:

Programozás C++ -ban

Mintavételes szabályozás mikrovezérlő segítségével

Programozási Nyelvek: C++

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

500. AA Megoldó Alfréd AA 500.

Processzus. Operációs rendszerek MINB240. Memória gazdálkodás. Operációs rendszer néhány célja előadás Memóriakezelés

5. Gyakorlat. struct diak {

Járműfedélzeti rendszerek I. 3. előadás Dr. Bécsi Tamás

Stack Vezérlés szerkezet Adat 2.

Programozás C++ -ban

Java II. I A Java programozási nyelv alapelemei

Átírás:

10. előadás Wagner György Általános Informatikai Tanszék

Pointerek, dinamikus memóriakezelés A PC-s Pascal (is) az IBM PC memóriáját 4 fő részre osztja: kódszegmens adatszegmens stackszegmens heap Alapja: 1 byte: 0-255 2 byte: 0-65535 Ha ezt címek tárolására használjuk, akkor 2 byte-on (16 biten) csak 64 Kb címezhető meg.

Szegmensek Az Intel 80286 processor 16 bites. A 64 Kb kevés. Megoldás: vegyünk 64 Kb-os lapokat ezen belül 2 byte-tal pontosan lehet címezni a 64 Kb-os lapokat számozzuk meg. Erre használjunk 4 bitet. 4 bit 0-15 között képes értékeket tárolni, ez tehát 16 lap. 16 64 Kb = 1024 Kb = 1 Mb Egy Dos számára ebből 640 Kb férhető hozzá. A lapokat nevezzük page-eknek vagy szegmenseknek. Ez a fajta címzés az ún. szegmenses címzés.

Szegmenses címzés (2) Ugyanazon szegmensen belüli címek közvetlenül címezhetők. Más szegmensben levő címek eléréséhez ún. szegmens regisztereket kell használni. Szegmens regiszterek: CS: Code Segment Register DS: Data Segment Register SS: Stack Segment Register ES: Extra Segment Register

TP-FP memória kezelése Unitok használata esetén minden egyes Unitnak saját kódszegmense van. A főprogramnak úgyszintén saját kódszegmense van. => Az egyes modulok mérete nem haladhatja meg a 64 Kb-ot. Minden program 1 (!) adatszegmenssel rendelkezik. Az adatszegmensben a főprogram tipizált konstansai, változói és az egyes unit-ok Interface részében deklarált hasonló objektumai vannak. Az adatok tárolása itt statikus, azaz a változónak lefoglalt hely a program futásának kezdetétől annak végéig foglalt marad.

TP-FP memória kezelése (2) Adattárolásra felhasználható még a stack és a heap. A stack-en csak közvetve lehet adatokat tárolni (lokális változók, értékszerint átadott paraméterek, ). A heap a programozó kezére van bízva. A TP-FP két standard függvénnyel rendelkezik: SEG ( ) OFS ( )

TP-FP memória kezelése (3) A SEG ( ) azt a szegmens címet adja vissza, amelyben a paraméterként megadott változó található. Az OFS ( ) azt a szegmensen belüli címet (ún. eltolási cím vagy offset cím), amelyben a paraméterként megadott változó található. (A kezdőcímét ) (Példa program 4 különböző típusú (Word, String[5], Real, Char) változó egy-egy futáson közbeni szegmens és offszet címének kiírására. Szünetben megnézhető )

TP-FP memória kezelése (4) Futásonként más és más íródhat ki. Pl.: Word String Real Char : 68BB:003C : 68BB:003E : 68BB:0044 : 68BB:004A A szegmens cím minden esetben megegyezik, mert mind az adatszegmensben van. A 20 bites cím (4+16) képzése: 68BB0 (megszoroztuk hexa 10-zel) + 003C -------------------- 68BEC

TP-FP memória kezelése (5) A nem tipizált konstansok a kódszegmensben vannak, részesei az utasításnak. Ebből következik, hogy a nem tipizált konstansoknak NINCS (!) címük.

Dinamikus változók Cél: olyan változók használata, amelyek a heap-en tárolódnak. Oka, hogy a heap nagy, egybefüggő, adattárolásra alkalmas memóriaterület. Egy nagy probléma van, hogy a programozónak kell az ott tárolt változót kezelgetnie. A változók egyik legfontosabb attributum-a címe. Vagyis a programozónak őriznie kell a heap-en tárolt változók címeit. Ehhez olyan változóra lesz szüksége, amely címet képes tárolni. Ezek a változók a pointerek (mutatók).

Dinamikus változók (2) Egy változó akkor dinamikus, ha számára csak akkor foglalódik le a hely a memóriából, amikor a változót ténylegesen használjuk, majd utána ezt a memóriát fel lehet szabadítani. A foglaláshoz tudni kell, hány byte-ot kell lefoglalni. Ez a típustól függ (de ugye ezt már mindenki tudja is ) Megoldás: a pointer változónak is tudnia kell, milyen típusú változóra fog mutatni.

Dinamikus változók (3) Szintaktika: Program Pr1; Var p : ^Integer; Begin New ( p ); p ^ := 100; WriteLn ( Az érték, amire p mutat:, p ^); Dispose ( p ); End.

Dinamikus változók (4) Megjegyzés: mivel a pointer változó statikusan (!) tárolódik, ezért az egész csak akkor kifizetődő, ha ennél nagyobb, pl.: összetett adatszerkezetre mutat (célszerűen rekordra). New ( ): a paraméterként megadott pointerváltozóhoz hozzárendeli azt a memóriacímet, amelytől kezdve a dinamikus változó tárolásához elegendő memória áll rendelkezésre, majd lefoglalja a heap-ről ezt a memória területet. (Szerencsére azt, hogy hol van szabad hely a heap-en, már nem a programozónak kell kikeresnie ) Dispose ( ): a p-ben tárolt címtől kezdve felszabadítja a heap-en a lefoglalt memória területet.

Dinamikus változók (5) Értékadás: p ^ := 100; és nem: p := 100;

Dinamikus változók (6) Más hibalehetőség: Ugyanannak a pointerváltozónak kétszer vagy többször NEM SZABAD (!) egymásután memóriát foglalni a New ( ) -val anélkül hogy közben fel ne szabadítanánk, mert a Dispose ( )-zal csak a legutoljára lefoglalt memóriaterület szabadítható fel, a többi elveszik! Ellenőrizni kell, hogy a program futtatása előtt mennyi volt a szabad memória terület, majd ellenőrizni kell a program futása után is. Ha nem egyezik meg a két érték, akkor általában ez a baj...