Salut à tous.
Alors j'essaie de comprendre un peu l'allocation mémoire sous windows. J'ai donc fait un tout petit code tout simple :
Comme résultat j'attendais 2 choses :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include "stdafx.h" int main(int argc, char* argv[]) { char *a; while(1) { a = new char[1024]; a++; } return 0; }
la 1è, ça aurait un dépassement de tampon. car en incrémentant a, je pointe sur le segment mémoire situé après a. à la première allocation, ok ça devrait marcher sans problème. mais pour la suite...
bon j'aurais une interpétation, mais je ne sais pas si elle est juste : en allouant 1024 octet à chaque fois, en admettant que je commence à l'adresse 0, en incrémentant a de 1 octet, je pointe sur de la mémoire déjà allouée par le programme. Donc l'OS accepte (je tourne sous Win XP sp2 pour précision).
la 2è, c'est que le programme aurait pris de + en + de mémoire jusqu'à ce qu'il n'y en ait plus de disponible. Or c'est monté jusqu'à 110 Mo puis redescendu vers 10Mo à peu près constant. Est-ce que l'OS libère de la mémoire au fur et à mesure ? d'un côté c'est bien car ça ne plante pas, mais si jamais on avait réellement besoin de cette mémoire, ben pas terrible.
Enfin voilà, merci de m'éclairer sur ces points. Désolé si ces questions ont l'air un peu bête...
++
Partager