This is an old revision of the document!
În urma compilării și linkării unui program rezultă un fişier binar care, indiferent de formatul lui, este reprezentarea programului în memoria procesorului pentru care a fost compilat. Aceasta reprezentare conține în mod uzual mai multe secțiuni implicite, secțiuni care în funcție de format au diverse denumiri, dar scopul lor este asemănător.
secțiunea de cod
(.code
sau .text
) este secțiunea în care se păstrează, codificate binar, instrucțiunile pe care le va executa procesorul.secțiunea de date
(.data
) este secțiunea în care se aloca variabilele globale.secțiunea de constante
(.const
sau .rodata
) este secțiunea în care se păstrează datele constante dintr-un program.secțiunea de heap
(.heap
) este secțiunea în care programatorul poate aloca dinamic memorie cu apeluri de tipul malloc sau new.secțiunea de stiva
(.stack
) este secțiunea folosita pentru pastrarea contextului specific fiecărei funcții (parametrii funcției, variabilele locale și alte date care nu sunt neapărat vizibile la nivelul programatorului).Dimensiunea secțiunilor, poziționarea lor în memorie, precum și alte aspecte legate de modalitățile de accesare a lor sunt specifice fiecărei arhitecturi. Din motive de securitate, unele procesoare pot restricţiona accesul la scriere in sectiunea de constante, sau pot permite executia doar din secţiunea de cod.
Din punct de vedere a reprezentării datelor, aceste secțiuni găzduiesc diferite tipuri de date din punct de vedere a vizibilității lor în program:
În figura de mai jos este o posibilă
distribuție a acestor secțiuni în memorie:
.stack ... .heap .data .const .code
În afară de aceste secţiuni implicite, programatorul poate defini secţiuni noi, eventual plasate în zone de memorie specificate explicit.