Le malloc()
alloue de l'espace arrondi à 16 octets (au moins en win32), de sorte que vous allez utiliser 32 octets dans la première alloc et 16 * 5 en la boucle.
Il y a aussi les frais généraux de malloc (à la fois, le temps et la mémoire), parce que malloc()
met un en-tête spécial, _CrtMemBlockHeader
avant la zone de mémoire, il retourne (c'est pourquoi vous devez donner exactement le même pointeur sur le free()
et sont en mesure de .. utiliser des fonctions comme _msize()
Ainsi, la quantité de mémoire réellement utilisée serait de 32 + 80 = 112 octets Considérant également les frais généraux pour en-tête: + 5 * sizeof (__ CrtMemBlockHeader)
le montant final peut être aussi élevé de 300 octets, soit environ 8 fois plus que le nombre attendu de 35.
Ma réponse est 39. Mais, je ne suis pas certain. –
Un caractère occupe toujours 1 octet - selon la norme. – sje397
'malloc' ne garantit pas d'allouer exactement le nombre d'octets demandés. 'malloc' alloue * au moins * le montant demandé. Ce qui signifie que la réponse correcte à la question indiquera toujours que "N octets au moins est attribué", quel que soit ce N. – AnT