quand tu alloues un tableau statique de taille 10 par exemple, comme tu l'as fait, tu réserves la mémoire dans un endroit réservé que l'on appelle la pile.
Tout objet créé ***statiquement*** (ie à la compilation) de cette manière sera automatiquement détruit lorsque tu sortiras de la portée ou il a été créé (au prochain '}' pour un objet local, lors d'une sortie de fonction pour une variable locale, lors de la sortie du programme pour une variable globale).
Par contre pour stocker des grands tableaux (10, ça va je te rassure) ou pour des gros objets, il vaut mieux utiliser le tas, qui est prévu pour ça.
Le tas permet de créer ***dynamiquement*** les objets, c'est-à-dire à la demande. Pour créer un tableau de taille 10 dynamiquement, tu feras un int* v = new int[10];
Mais du coup il ne faut pas oublier de l'effacer, sinon il y aura des fuites mémoires : delete[] v;
Dans le cas de la pile, la gestion mémoire est gérée par le système grace à une... pile (et oui), donc c'est très simple tu n'y peux rien. Par contre, dans le cas du tas le système gère la mémoire de manière plus compliquée (quels blocs ont été alloués avec quelle taille, quels blocs viennent d'être désalloués, quel est le prochain bloc libre, classement des blocs libres suivant leur taille et la fragmentation mémoire, etc...) mais la bonne nouvelle, c'est que si tu es ***très*** motivé, tu peux surcharger ce comportement et gérer toi même la mémoire, mais bon courage !
Si ça t'intéresses, il n'y a qu'à surcharger les opérateurs ::new ::delete globaux ou bien les new delete propre à une classe donnée.
[^] # Re: vu que...
Posté par aedrin . En réponse au message taille d'un tableau avec sizeof. Évalué à 3.
Tout objet créé ***statiquement*** (ie à la compilation) de cette manière sera automatiquement détruit lorsque tu sortiras de la portée ou il a été créé (au prochain '}' pour un objet local, lors d'une sortie de fonction pour une variable locale, lors de la sortie du programme pour une variable globale).
Par contre pour stocker des grands tableaux (10, ça va je te rassure) ou pour des gros objets, il vaut mieux utiliser le tas, qui est prévu pour ça.
Le tas permet de créer ***dynamiquement*** les objets, c'est-à-dire à la demande. Pour créer un tableau de taille 10 dynamiquement, tu feras un int* v = new int[10];
Mais du coup il ne faut pas oublier de l'effacer, sinon il y aura des fuites mémoires : delete[] v;
Dans le cas de la pile, la gestion mémoire est gérée par le système grace à une... pile (et oui), donc c'est très simple tu n'y peux rien. Par contre, dans le cas du tas le système gère la mémoire de manière plus compliquée (quels blocs ont été alloués avec quelle taille, quels blocs viennent d'être désalloués, quel est le prochain bloc libre, classement des blocs libres suivant leur taille et la fragmentation mémoire, etc...) mais la bonne nouvelle, c'est que si tu es ***très*** motivé, tu peux surcharger ce comportement et gérer toi même la mémoire, mais bon courage !
Si ça t'intéresses, il n'y a qu'à surcharger les opérateurs ::new ::delete globaux ou bien les new delete propre à une classe donnée.