Impossible de récupérer la taille d'un tableau dynamique, mais le free il la tro

Résolu
Nosferatu181187 Messages postés 21 Date d'inscription samedi 15 mars 2003 Statut Membre Dernière intervention 17 décembre 2005 - 23 juil. 2005 à 23:30
Nosferatu181187 Messages postés 21 Date d'inscription samedi 15 mars 2003 Statut Membre Dernière intervention 17 décembre 2005 - 24 juil. 2005 à 15:17
Bonjour tout le monde, je me suis posé la
question récemment, que l'on soit en c ou en c++ et qu'on utilise un new ou un
malloc pour faire une allocation de mémoire dynamique, il est impossible de
récupérer la taille d'un tableau, si l'on n'en a pas conservé une trace quelque
part. Il faut soit la conserver dans une variable, soit faire de l'arithmétique
avec les pointeurs, pour peux qu'on aille un pointeur vers la fin du tableau.






Mais, une fois qu'on a fini de faire joujou avec
notre beau tableau et qu'on appelle la fonction free ou delete[] pour libérer
la mémoire, c'est fonction n'aurait pas besoin de savoir la taille des tableau
a libérer ? Juste histoire de pas faire de grosses gaffes ? quand est-ce que le
programme 'sait' qu'il a fini de libérer la mémoire ? qu'il est au bout ? que
après c'est plus le tableau qu'on lui a attribué ? BREF est-ce que quelqu'un
sait ce qu'il y a à l'intérieur de cette fonction free ou delete[] (delete[] appelle free non ?) ??? n'y a-t-il pas un
'signe' a la fin du tableau, comme il y a un 0 à la fin d'une chaîne de
caractères ??? un truc un chose n'importe quoi mais quelque chose ?



Because c'est pas gentil de la part de l'ordi de pas nour rendre la taille du tableau snif snif !!!!



d'avance merci.

PS: ça m'empèche quand même pas de dormir la nuit hein !

8 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
24 juil. 2005 à 01:05
C'est logique de se poser cette question. En fait c'est le système qui garde ca en mémoire. On pourrait très bien y avoir accès, mais ce n'est pas le cas avec new et malloc. Par contre en Win32, HeapAlloc permet de faire une allocation de mémoire, et après tu peux connaitre la taille allouée avec HeapSize
3
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
24 juil. 2005 à 13:38
Je pense a un truc, on pourrait peut etre faire une boucle avec une fonction IsBad****Ptr() pour aller jusqu'au bout de la zone allouée nan ? On avance de 4 octets a chaque itération, on verifie si cette zone est allouée...etc. Par contre, je sais pas si niveau perf c'est tres bien :|

+2(p - n)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
24 juil. 2005 à 13:39
Rien ne te dis que deux zones allouées séparément ne sont pas contiguës, donc je dirais non
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
24 juil. 2005 à 13:40
Niveau perf, non ce serait pas très bien évidemment
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
24 juil. 2005 à 13:53
Oui je n'avais pas pensé a ca

+2(p - n)
0
Nosferatu181187 Messages postés 21 Date d'inscription samedi 15 mars 2003 Statut Membre Dernière intervention 17 décembre 2005
24 juil. 2005 à 15:07
Merci, [auteurdetail.aspx?ID=19734 vecchio56], je
n'avais pas pensé à aller voir dans les api win32, je crois que
désormais, si je suis en win32 j'allouerais de la mémoire par HeapAlloc
; je m'étonne juste que aucune bibliothèque n'aie pensé à ce problème,
c'est stupide de stocker une information quelque part et de ne pas
permetre de pouvoir, au moins la lire ;-)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
24 juil. 2005 à 15:13
C'est ca l'intérêt des classes du C++: un objet qui alloue de la mémoire a en général une propriété qui est utilisée pour connaitre la taille allouée (on peut le faire aussi avec des structures en C)
0
Nosferatu181187 Messages postés 21 Date d'inscription samedi 15 mars 2003 Statut Membre Dernière intervention 17 décembre 2005
24 juil. 2005 à 15:17
Oui, je sais bien que les classes C++ on une méthode .size(), mais je
métonnais que ce ne soit pas directement prévu dans le language C car
la méthode .size() utilise une variable et donc de la mémoire en plus,
alors que l'information est déja stockée. Question optimisation même si
ce n'est qu'une variable, ce n'est pas terrible terrible !
0
Rejoignez-nous