This is an old revision of the document!


06. Code generation. Structure of data and objects in memory

Î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.

Tipuri de secțiuni

  • 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:

  • variabilele globale se vor regăsi în secțiunea de date
  • constantele se vor regăsi în secțiunea de constante. Majoritatea compilatoarelor încadrează la aceasta secțiune și şirurile de caractere explicite.
  • variabilele locale se vor regăsi fie într-un registru, fie pe stiva în contextul specific funcției de care aparțin.

Î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.

cpl/labs/06.1478548856.txt.gz · Last modified: 2016/11/07 22:00 by bogdan.nitulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0