Nosferatu181187
Messages postés21Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention17 décembre 2005
-
23 juil. 2005 à 23:30
Nosferatu181187
Messages postés21Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention17 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 !
A voir également:
Impossible de récupérer la taille d'un tableau dynamique, mais le free il la tro
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 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 :|
Nosferatu181187
Messages postés21Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention17 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 ;-)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 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)
Nosferatu181187
Messages postés21Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention17 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 !