2010-12-01 7 views
3

Possible en double:
C programming : How does free know how much to free?Comment free() sait combien de mémoire libérer?

Dans cet extrait

void main() { 
void *p = malloc(300); 
printf("%d",sizeof(*p)); 
free(p); 
} 

Comment savoir libre de mémoire, il est supposé la libération du pointeur de vide?

je me dis que, s'il y a une table interne/fonction, il devrait être disponible pour trouver des tailles de toutes sortes d'objets, alors que la sortie du printf est 1

+0

ma mauvaise, je devrais vraiment avoir cherché sans la parenthèse :) –

Répondre

3

malloc et libre font leur propre comptabilité cachée afin qu'ils puissent faire la bonne chose.

La raison pour laquelle sizeof() n'utilise pas cette information de comptabilité est que sizeof() est un opérateur de compilation et que les informations malloc/free ne sont pas disponibles avant l'exécution.

0

Chaque implémentation de malloc a une donnée interne structure du nombre de blocs alloués. free et malloc vont main dans la main si libre sait exactement où chercher.

Voir this Wiki article on Free List pour plus d'informations

+0

"... de combien de blocs alloués", de l'emplacement de chaque bloc alloué, et de la taille de chaque bloc alloué: donc pour tout bloc cela est en train d'être libéré, il (l'implémentation de tas) se souvient de la taille de ce bloc. – ChrisW

+0

cet article devrait vraiment être sur malloc du wiki & articles gratuits –

1

Cela dépend la mise en œuvre. Dans certains systèmes, j'ai vu, il réserve quelques octets avant le pointeur avec des informations de la taille du morceau réservé, le prochain emplacement libre de la mémoire, etc Comme pour le sizeof(void), cela n'est pas spécifié.

3
+0

S'il vous plaît inclure des informations réelles dans les réponses, en plus des liens qui peuvent devenir périmés. – Darron

+0

Pourquoi cela a-t-il été rejeté? C'est exactement ça. –

+0

Il est quasiment improbable que la FAQ comp.lang.c devienne obsolète avant que Stack Overflow ne le fasse ... –

Questions connexes