302 votes

Comment delete [] "sait" la taille du tableau d'opérandes?

 Foo * set = new Foo [100];
// ...
delete [] set; 
Vous ne passez pas les limites du tableau à supprimer []. Mais où sont stockées ces informations? Est-ce standardisé?

226voto

QuantumPete Points 1370

Lorsque vous allouez de la mémoire sur le tas, votre allocateur gardera une trace de la quantité de mémoire allouée. Ceci est généralement stocké dans un segment "head" juste avant la mémoire qui vous est allouée. De cette manière, lorsqu'il est temps de libérer de la mémoire, le désallocateur sait exactement combien de mémoire doit être libérée.

20voto

luke Points 16255

Cela dépend de l'implémentation de votre compilateur.

La FAQ C ++ Lite contient quelques informations supplémentaires sur le sujet.

13voto

Daemin Points 5651

L'information n'est pas standardisée. Toutefois, dans les plates-formes que j'ai travaillé sur cette information est stockée dans la mémoire juste avant le premier élément. Par conséquent, vous pourriez théoriquement l'accès et l'inspecter, cependant c'est pas la peine.

Aussi c'est pourquoi vous devez utiliser delete [] lorsque vous la mémoire allouée avec new [], comme le tableau de la version de supprimer sait (et où) elle doit regarder gratuit la quantité de mémoire - et d'appeler le numéro de destructeurs des objets.

8voto

Une belle description de comment cela pourrait fonctionner dans la pratique est donnée par Raymond Chen :

http://blogs.msdn.com/oldnewthing/archive/2004/02/03/66660.aspx

2voto

Joel Coehoorn Points 190579

Car le tableau devrait être « supprimé » doit avoir été créé avec une seule utilisation de l’opérateur « new ». L’opération « neuf » devrait ont mis cette information sur le tas. Sinon, comment les utilisations supplémentaires de nouveau savoir où le tas se termine ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X