Pour répondre à votre question, il a à voir avec la conception de la gestion de la mémoire système.
En théorie, si vous avez écrit votre propre système de mémoire vous pourrait tout à fait concevoir qu'il se comporte exactement comme vous l'avez dit.
La question devient alors, pourquoi n'était-il pas été conçu de cette façon. La réponse est que la gestion de la mémoire système fait un compromis entre l'utilisation efficace de la mémoire et de performances.
Par exemple, la plupart de la mémoire des systèmes de gestion de ne pas gérer la mémoire vers le bas à l'octet. Au lieu qu'ils cassent la mémoire en 8 KO morceaux. Il y a des tas de raisons à cela, dont la plupart sont autour de la performance.
Une des raisons ont à voir avec la façon dont le processeur se déplace de la mémoire autour. Par exemple, disons que le processeur était beaucoup mieux lors de la copie d'8 KO de données à un moment, puis il a été à la copie de 4 KO. Ensuite, il ya un avantage de performance de stocker les données dans 8 KO morceaux. Ce serait une conception du commerce hors basé sur l'architecture du PROCESSEUR.
Il y a aussi algorithmique de la performance des arbitrages. Par exemple, dire à partir de l'étude du comportement de la plupart des applications que vous trouvez que 99% des applications d'allouer des blocs de données qui sont 6 KO 8 KO.
Si le système de mémoire qui vous a permis d'allouer et de libérer de 4 ko, il serait parti avec un avec gratuit de 4 ko morceau que 99% des allocations de ne pas être en mesure d'utiliser. Si, au lieu de plus de alloués à 8 KO, même si seulement 4 KO sont nécessaires, il serait beaucoup plus réutilisable.
Considérons encore une autre conception. Dire que vous avez une liste de positions de mémoire libres qui pourraient être de toute taille et une demande a été faite pour allouer de 2 ko de mémoire. Une approche possible serait de regarder à travers votre liste de libérer de la mémoire et en trouver un qui est au moins égal à 2 ko en taille, mais ne vous regardez à travers l'ensemble de la liste pour trouver que le plus petit bloc, ou vous trouvez le premier qui est assez grand et l'utiliser.
La première approche est plus efficace, mais plus lent, la seconde approche est de moins en moins efficace mais plus rapide.
Il devient encore plus intéressant dans des langages tels que C# et Java qui ont "réussi de la mémoire". Dans un mémoire gérée par le système de la mémoire n'est pas encore libéré; il s'arrête juste à s'habituer, ce qui le garbage collector plus tard, dans certains cas, beaucoup plus tard, détecte et la libère.
Pour plus d'informations sur la gestion de la mémoire et de l'allocation que vous voudrez peut-être consulter cet article sur Wikipedia:
https://en.wikipedia.org/wiki/Memory_management