5. előadás
Memóriakezelés
Hierarchikus felépítés (RAM, cache, registerek)
Gyorsítótárak (Cache)
Processzorokban található típikusan. Memória írása, olvasásakor használatos.
SOKKAL gyorsabb elérésű, mint a RAM, de kevesebb.
Programok futása
Address space (címtér): a program számára elérhetőmemória.
Ha egy program kilép ebből az address space-ből, akkor az operációs rendszer közbelép és leállítja a programot. (segfault c:)
C programok címtere
- text: programkód, read-only
- intialized data: globális és statikus változók. Van read-only és read-write része is
- uninitialized data: változók tárolására szolgáló memória
- heap:
malloc-al allokálható. - stack: függvények számára elérhető memória
- command line argumentumok
Ha elfogy a memória, használható virtuális memória
Pointerek
Olyan típus, amely egy változó memóriacímét tárolja
Cím operátor
Változóra alkalmazva, megadja annak a tárcímét, tehát a rá mutató mutatót
Indirekció operátor
Pointerre alkalmazva, a pointer által mutatott tárterületet jelöli
Null pointer
Egyetlen változó címének sem felel meg If you dereference it, you die.
Műveletek pointerekkel
Pointer változóknak értékül adhatunk ugyanolyan típusú pointer értékeket.
Két pointer értékét össze lehet hasonlítani == és != operátorokkal. Két pointer akkor egyenlő, ha ugyan oda mutatnak.
Ha a két pointer ugyan annak a tömbnek az elemeira mutatnak, akkor értelmezhetőek a relációs (pl <, >= stb.) operátorok is. Ekkor a tömb indexeket hasonlítjuk össze.
A művelet lehetséges tömbön kívül is, azonban ez nem várt viselkedéshez vezethet!
Pointer aritmetika
double t[] = {1.0, 2.0, 3.0, 4.0};
double *dp;
dp = t;
assert(dp+1 == &t[1]);
assert(dp+3 == &t[3]);
assert( dp+k == &t[k]);
assert(*(dp+k) == t[k]);
Tömbök
double dt[5];
int it2[6] = {1,2,3,4,5,6};
int it3[] = {7,8,9};
char h1[] = "hello"; //Mérete: 6
char h2[] = {'h', 'e', 'l', 'l', 'o', '\0'};