Kezdőoldal » Számítástechnika » Programozás » Kérdés a C/C++ nyelv volatile...

Kérdés a C/C++ nyelv volatile típusminősítéjéről?

Figyelt kérdés

Programozzunk C nyelven és Programozzunk C++ nyelven c. könyv:


"A volatile típusminősítővel olyan objektum hozható létre, amelyet (teljesen hivatalosan) a programunktól független kód (például egy másik futó folyamat, vagy megszakítást kezelő rutin) is megváltoztathat."


Ez oké.


"A volatile azt közli a fordítóval, hogy az nem tud mindent, ami az adott objektummal történhet."


Ez is.


"Ezért például a fordító minden egyes, ilyen tulajdonságú objektumra történő hivatkozáskor, a memóriából veszi fel az objektumhoz tartozó értéket."


Két kérdés:


1. Ha volatile változót használok (nyilván futásidőben) akkor hogy kerül a képbe a fordító? Ez nem tiszta

2. Mi az hogy a memóriából veszi fel az értéket? Eleve nem minden változóra történő hivatkozáskor (futásidőben) a program a memóriaterületéről vesz fel értéket, vagy tévednék?


Köszönöm, üdv


2013. jún. 8. 10:01
1 2
 11/13 A kérdező kommentje:

Nagyon köszönöm a válaszokat, csupán egyetlen egy apró kérdésem lenne:


"Mondjuk, hogy van egy 'int i' változód, amihez a fordító (ill. linker) majd hozzárendel egy címet."


Konkrétan milyen címet? A létrejövő kód adatszerkezetén hogy hol van az adat, arra egy memóriacímet? Gondolom nyilván nem a futási időben a programhoz kapcsolt memóriaterületre mutató címet mert elvileg az változó (igen, az ilyen "színfalak mögötti" dolgokban nagyon sok hiányosságom van még, ezért érdekel.


Nagyon köszönöm, üdv

2013. jún. 8. 22:41
 12/13 anonim ***** válasza:

Amikor azt mondod, hogy 'int i', akkor létrehoztál egy szimbólumot, ami változó neve. Mikor a fordító (compiler) lefordítja a forráskódot, akkor is még csak egy szimbólum lesz, és minden utasítás így hivatkozik rá, bár maguk az utasítások már le vannak fordítva. Ez lesz a tárgykód. A fordítás után (általában) rögtön lefut a szerkesztő is (linker), ami már a kész futtatható kódot állítja össze a tárgykód(ok)ból. Ilyenkor derül ki, hogy a memóriában melyik változó hova is fog kerülni, és a linker itt már fel tudja oldani a hivatkozásokat, vagyis a szimbólumokat kicseréli konkrét memóra címekre. Ebből lesz a közvetlenül futtatható vagy natív kód. (Lehet más eredmény is, például a java egy köztes bájtkódot generál, ami egy virtuális gépen fut. Ott pl. futásidőben dőlnek el a címek.)


Amikor címekről beszélünk, akkor persze nem konkrét fizikai memóriacímekre kell gondolni, hanem csak azt adja meg, hogy a program adatszegmensén belül hol lesznek az adatok (pl. változók). Majd indításkor fogja az operációs rendszer eldönteni, hogy hova tölti be a programot, és a proci futás közben állítja elő a tényleges címeket. (Lehet, hogy ahányszor indítod, mindig más memóriaterületre töltődik be a program, ahol épp hely van. A hivatkozásoknak mégis működniük kell. :))


(És akkor ezek még csak virtuális memória címek, ezekből megintcsak a hardver és az op.rendszer együtt fog valós fizikai címet csinálni, de ez már egy másik történet. :))

2013. jún. 9. 12:54
Hasznos számodra ez a válasz?
 13/13 A kérdező kommentje:
Köszönöm a választ, üdv
2013. jún. 9. 21:54
1 2

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!