42Fermer44
squalylLe 10/01/2011 à 15:37
Penpen: quand tu fais malloc() et que les pages actuellement allouées à l'implémentation de malloc dans la libc sont épuisées, la libc appelle sbrk() qui augmente la taille du "segment de données" et dit au krenle "crée des entrés dans le manager de VM pour dire que de nouvelles adresses virtuelles sont désormais mappables sur de la mémoire physique si on te demande cette adresse, au lieu de segfaulter comme un con".

et c'est juste au moment ou tu fait *mem = tartempion que ça fait un défaut de page, que ça dit "hmm? ah bah finalement c'était pas du bluff, faut vraiment que je mettre une page de données à cette adresse... ah bah merde j'en ai plus #modtop# ", du coup swap, OOM killer, et toussa.

quelle belle machine, en somme!

PS: du coup du calloc() est plus mieux si tu veux être sûr de ton alloc, vu qu'il initialise tes pages à zéro avant de te les filer (donc il écrit vraiment dedans)