Bonjour à tous,
actuellement, je dois m'occuper de la partie "allocation dynamique" d'un projet de compilateur, mais je n'ai aucune idée réelle de comment ça se passe, et comment on implémente cela.
A la base, je partais sur l'idée de rester sur la stack, et allouer simplement de la place quand nécessaire (genre pour traduire un alloc/alloc_array).
Mais je me suis vite rendu compte que ça deviendrait infaisable pour la simple raison que lorsque j'alloue une zone sur la stack, dans une fonction, et que la fonction finit son exécution, dans la plupart des cas, le pointeur de la stack va remonter et donc l'espace alloué sera en-dessous du pointeur de la stack, et si j'appelle de nouveau des fonctions, je dois m'assurer que je ne réécrit pas sur cet espace... et donc la stack me paraît un très mauvais choix pour l'allocation dynamique.
Ensuite, j'ai entendu parlé de "heap" un peu partout, comme si c'était la solution à l'allocation dynamique, à part que je n'ai trouvé AUCUN tutorial à propos de cette pile en x86-64/x86 sous linux.
Bien sûr, il y a aussi l'argument : utilise malloc qui fait ça, mais j'ai l'impression que ce n'est pas du tout ce que je dois faire vu que je devrais être sensé plutôt "implémenter moi-même malloc".
Et finalement, j'ai aussi vu ça et là que un certain syscall à brk :
http://www.dreamincode.net/forums/to...e-memory-heap/
Sauf que ça ne fait pas vraiment appel à la "heap" et que j'ai plutôt été aiguillé pour utiliser cette dernière par mon prof.
Avez-vous des informations sur l'allocation dynamique en x86-64 sous linux ?
Je dois avouer ne pas avoir d'intérêt à appeler des functions malloc ou autre, je suis sensé les implémenter en asm !
Sauf que ça a l'air évident pour tout le monde vu que personne n'en parle (ou c'est un grand mystère ? - j'en doute).
Merci pour votre aide
Partager