
Envoyé par
Médinoc
Cela tient à la philosophie même du langage C: Celui-ci a été pensé pour la performance et pour offrir le maximum de liberté à l'implémentation. Ce qui soulève les problèmes suivants si on voulait rajouter une fonction getallocsize():
Pour des raisons de performance, d'alignement etc., la zone mémoire allouée peut être plus grande que la demande (par exemple, une taille arrondie aux 8 octets supérieurs). Quelle taille faudrait-il alors retourner? La vraie taille, comme le fait LocalSize() sous Windows, ou la taille demandée, comme le fait HeapSize?
Le premier cas peut poser des problèmes parce que malloc() n'initialise pas la mémoire qu'elle alloue, on risque donc un code qui demande X octets, les initialise, puis plus tard récupère la taille et croit que toute la zone est initialisée.
Le second cas oblige l'implémentation à mémoriser quelque part la taille demandée, qui peut être en plus de ses autres informations. D'où, utilisation de plus de mémoire pour chaque allocation, ralentissement de chaque allocation... malloc() est une fonction utilisée assez souvent pour que la performance puisse être un souci.
Garder en mémoire la vraie taille demandée serait probablement moins gênant en C++, qui en a déjà besoin pour toutes les allocations de tableaux de types contenant un destructeur.
Partager