A C nyelvű memóriamodell a C nyelvű objektumok tárolására szolgáló rendszer [1] .
Az objektum C-ben való tárolásának módja határozza meg az élettartamát, a programvégrehajtási időnek azt a részét, amely alatt az objektum létezik vagy helyet foglalnak le számára. Az objektum állandó címmel rendelkezik , és megőrzi utolsó értékét. Megszűnt objektumhoz tilos hozzáférni, míg ha egy tárggyal végzett munka során mutatót használtak, annak értéke definiálatlan marad.
Az objektumok tárolásának három módja van [1] : automatikus, statikus és dinamikus .
Ingatlan | Auto | Statikus | Dinamikus |
---|---|---|---|
Hirdetés | Tárgy kötés nélkül és anélkülstatic | Belső vagy külső kötéssel rendelkezik, vagy minősítővel van deklarálvastatic | Kiemelve:malloc |
A létezés ideje | Az a blokk, amelyben az objektum deklarálva van | A program folyamatosan fut | Hívásról mallochívásrafree |
Inicializálás | Hiányzik, ha nincs kifejezett inicializálás | A program indulása előtt egyszer fordul elő. | Részben abban az esetbencalloc |
A méret | Rögzített, megváltoztathatatlan | Rögzített, megváltoztathatatlan | Bármilyen, változtatható |
Tipikus elhelyezés | Verem vagy processzor regiszterek | Külön memória szegmens | halom |
Egy statikus objektum explicit módon inicializálható, vagy alapértelmezett inicializálás használható.
A függvény használatakor callocminden objektum nulla, kivéve a lebegőpontos számokat és a mutatókat [2] .
Azok a nem értékértékű kifejezések , amelyek egy struktúra ( struct) vagy unió ( ) tagjaként működő tömbre hivatkoznak, unionélettartamukat a kifejezés kiértékelése korlátozza [1] .
A mutatókat inicializáló C-karakterláncok char*statikus tárolási típussal rendelkeznek, ezért nem szabad megváltoztatni [3] .
Egyetlen objektum sem lehet a dinamikus memóriában a programozó kifejezett utasítása nélkül. mallocA dinamikus memória használatához a , callocés a függvények állnak reallocrendelkezésre free. Mivel a memóriát lefoglaló függvények mérete egy típusú változóban van size_t, a lefoglalt memória maximális mennyisége korlátozott SIZE_T_MAX[1] .
A mallocés függvények callocmemóriát foglalnak le, amelyet használat után a szám hívásával kell felszabadítani free. A felszabadítás után a mutató értéke meghatározatlan marad . A függvény reallocmutatót ad vissza a módosított memóriablokkra, ha a kérés nem teljesíthető, a memóriablokk mérete nem változik [1] .
#include <stdlib.h> void foo ( érvénytelen ** ptr , size_t méret ) { * ptr = realloc ( * ptr , méret + 128 ); /* memóriaszivárgás, ha a realloc NULL értéket ad vissza */ if ( !* ptr ) { ... } }Ha dinamikus memóriával dolgozik, memóriaszivárgás és dupla blokkmentes hibák lehetségesek.