Kezdőoldal » Számítástechnika » Programozás » Memóriaterület, címzés, heap,...

Memóriaterület, címzés, heap, stack, regiszterek stb. Hogy is és mik is ezek?

Figyelt kérdés

Pascal/Delphi-t tanulok


Könyvekből "Programozzunk Turbo Pascal nyelven"

"Programozzunk Delphi 7 rendszerben!"


Elvileg ezek kezdőknek/középhaladóknak vannak, és a Pascal/Delphi részek tényleg nagyszerűen le vannak írva érthetően, de ezek a memória-közel dolgokat úgy veszi h egy rakás dologgal tisztában vagyok, mert pl sehol sem tér ki arra h pontosan mi az a stack, heap stb. Írja h a memóriaterületet címezhetjük, de egyáltalán mi az? Hogy képzeljem el, mint egy 2 dimenziós koordináta rendszert? Vagy mint egy 1 dimenziós koord rendszer, egy eljárás itt kezdődik (x) és itt végződik (y).


Aztán jön a memóriacím. Szépen leírja h 4 bájtos érték, szegmenscímet és eltolást tartalmaz amik egyértelműen kijelölik a memóriaterület egy pontját, DE HOGYAN??, és ez a memóriaterület egyáltalán hol van?


Az oké h a .EXE indításakor az oprendszer (Windows) egy memóriaterületet biztosít az alkalmazásnak, ez honnan kerül ki? Fizikai vagy virtuális memória? És ez a memóriaterület amivel a programozó gazdálkodhat a memóriacímek más indításokkor megváltoznak vagy mindig ugyanazok (mert pl nembiztos h az .EXE indításakor mindig pont ugyanazt a memóriaterületet kapja vagy hogy van ez?)


Egyszerűen alapjaiba véve hiányosságok vannak h egyáltalán mi az h memóriaterület, memóriacímzés, stack, heap, regiszterek stb.. És ezeket sehol nem írná le a könyv, de úgy veszi h én tisztában vagyok ezekkel. A regiszterekről meg aztán végképp lövésem sincs.


Már kiolvastam a Turbo Pascal könyvet 2-3x és sehol nem igen találtam pontos definíciót h ez mopst egyáltalán micsoda.


Ezekkel kapcsolatosan nincs vmi könyv amit ajánlanátok nekem, ami az ien memória-közeli dolgokkal foglalkozik, memóriacímzés, stack, regiszterek stb. Vagy legalább bármien könyv-, fejezet-, vagy internetes cikk ami kitér ezekre? Hálás lennék ha pár címet tudnátok mondani vagy elmagyaráznátok h hogy is vannak ezek.


Nagyon köszönöm, Üdv


2012. aug. 15. 13:01
 1/7 anonim ***** válasza:
100%

Nem olvastam a könyvet, de valószínűleg a szerző úgy gondolja, hogy nem fontos belemenni a részletekbe, vagy az oktató elmondja nagy vonalakba.

Igaz nem árt tudni ,hogy hogy működik,de attól még lehet programozni hogy nem tudjuk a pontos részleteket. Persze profiknak kötelező tudni.


stack magyarul verem : [link]

Sok mindenre használlatos. Pl eljárás hívásnál/alprogram hívásnál eltárolódik a hívás helye a verembe és mikor lefutott az eljárás a veremből kiolvasva a megfelelő helyen folytatódik a program futása, ha az eljárás újabb eljárást hív és az még újabbat akkor mindig a verembe rakja tárolja hogy majd ha lefutott az eljárás akkor hova kell ugrani, ez fordított sorrendbe van.

Lényeg az hogy fordított sorrendbe tudod kivenni belőle a dolgokat mint ahogy beleraktad.


heap,(halom) : [link]

pl a lokális változók a heap-on vannak tárolva.

Lényeg: "A memória azon része, amelyből blokkok dinamikusan foglalhatók le és szabadíthatók fel."

Vagy pl dinamikus tömb, futás közbe kevésnek bizonyul a jelenlegi tömb mérete akkor a program még kér az OS-től memóriát a rendszer azt mondja hogy adok még, így megnövelve a tömb méretét, vagy azt mondja a program hogy ez a tömb már nem kell a rendszer felszabadítja és helyébe más programobjektumok kerülhetnek vagy más program megkaphatja azt a memóriaterületet. Szemben a statikus memóriaterülettel ami a program futása végéig birtokolja a program.


" Írja h a memóriaterületet címezhetjük, de egyáltalán mi az? Hogy képzeljem el, mint egy 2 dimenziós koordináta rendszert? "

A memória olyan mint egy hosszú-hosszú (villany)kapcsolók sora. Egy kapcsoló állása az 2 féle lehet 0 és 1. Kapcsolók állását leolvasni vagy módosítani tudjuk. Egyszerre minimum 8 egymáskövető kapcsolót tudunk leolvasni vagy módosítani, 1 bájt = 8 bit, vagyis a memória bájtos szervezésű. Úgy kell tekinteni hogy a bájtok sorban egymás után vannak. Egy memóriaterület teljes memória valahanyadik bájttól valahanyadik bájt közötti része.

"Az oké h a .EXE indításakor az oprendszer (Windows) egy memóriaterületet biztosít az alkalmazásnak, ez honnan kerül ki? "Természetesen a fizikai memóriából. Ezt még az .EXE-nek sem kell tudnia, ez az operációs rendszer dolga.

"És ez a memóriaterület amivel a programozó gazdálkodhat a memóriacímek más indításokkor megváltoznak vagy mindig ugyanazok (mert pl nembiztos h az .EXE indításakor mindig pont ugyanazt a memóriaterületet kapja vagy hogy van ez?)"

Más és más lehet minden indításkor, lehet hogy a korábbi futáskor lévő memóriaterületet egy másik futó program birtokolja. Sőt ha ugyan azt a programot több példányba elindítod akkor simán futnak, nem keveredik össze.

A regiszterekről meg röviden annyit hogy a processzorban lévő kis méretű memóriaterületek melyek elérése sokkal gyorsabb mint a RAM elérése. Sok mindent csak regisztereken keresztül tud elvégezni a processzor, ha kell akkor előbb betölti oda a RAM-ból.



Ha komolyabban érdekel:

Ha érdekel az operációs rendszerek működése : [link]

Mondjuk neked inkább a hardver közeli assemly kell (Egyetemi jegyzet)

[link]

2012. aug. 15. 17:28
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

NAGYON NAGYON köszönöm!!! Különösen a linkeket, és a kifejtéseidet :D


Még egyszer NAGYON köszönöm! Üdv!

2012. aug. 16. 12:08
 3/7 A kérdező kommentje:

Egy utolsó kérdés. Tehát ha a .EXE hez rendelt memóriaterület mindig más és más, akkor pl: a szöveges képernyőpuffer a $nemtomfejből:0 címen kezdődik. Akkor ez, meg más ienek amiket még említ a könyv (pl billentyűzet puffer stb) akkor a memóriaterület ezen részei nem a .exe-hez rendelt memóriaterületen vannak, hanem megosztva az operációs rendszernél?


Köszönöm mégegyszer, Üdv

2012. aug. 16. 12:21
 4/7 anonim ***** válasza:

Igen.

A memóriának vannak "speciális címei".

2012. aug. 16. 13:38
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:
100%

Szívesen. :)


Nincs külön címterülete a futó exe-nek, hanem olyan memóriaterületet(területeket) használ amit(amiket) kioszt neki az operációs rendszer és minden memória hozzáférés, meg ezen kívül minden kérés az operációs rendszeren keresztül történik,ha az pl. exe olyan memóriaterületet kíván elérni amihez nincs joga , akkor csúnyán "rácsap" a "kezére" az OS.


"a szöveges képernyőpuffer a $nemtomfejből:0 címen kezdődik..."

Igen még DOS-ba így volt, amit joggal tekinthetünk nem operációs rendszernek. Ott ténylegesen úgy volt hogy adott memóriaterületet simán írtunk melynek hatására a karakteres képernyőre írtunk.(A turbo pascal is abból az időből származik) Ez a mai szemmel nézve elég vad, ilyen direkt memória hozzáférést különböző perifériákhoz a mai operációs rendszereken tiltott dolog. Ezeket csak rendszerhívásokkal érhetjük el.

A kompatibilitás érdekében az operációs rendszer szimulál olyan környezetet, hogy működjenek a régi DOS-os programok.(Még ha nem is mindegyik.)

2012. aug. 16. 14:36
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

Persze valójában pl a grafikus képernyőnek van saját címtartománya, de ehhez a felhasználó programoknak semmi köze nincs, nem írhatják át vagy olvashatják ki a tartalmát, vagyis úgy nem mint a sima memóriát ehhez csak az OS-nek van joga, illetve kernel szintű magas privilégium szinten lévő programnak.

Míg DOS-ba vagy mondjuk win 95-ben simán lehetett, de az nagyon nem biztonságos.

2012. aug. 16. 14:45
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

Köszönöm mindenkinek a válaszát,


Üdv

2012. aug. 17. 12:50

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!