Tout d'abord, je suis d'accord avec les autres posters, qui a suggéré une fuite de ressources. Vous voulez vraiment de règle que le premier.
Heureusement, le gestionnaire de tas que vous utilisez actuellement est un moyen de vider le total réel de l'espace libre disponible dans le tas (dans tous les gratuit blocs) et aussi le nombre total de blocs qu'il est réparti sur. Si la moyenne bloc libre de taille est relativement petite par rapport à l'ensemble de l'espace libre dans le tas, alors tu as un problème de la fragmentation. Alternativement, si vous pouvez faire un dump de la taille du plus grand bloc et de les comparer à l'espace libre total, qui va accomplir la même chose. Le plus grand bloc serait faible par rapport au nombre total libre de l'espace disponible dans tous les blocs si vous êtes en cours d'exécution dans la fragmentation.
Pour être très clair sur le dessus, dans tous les cas, nous parlons de libre - blocs dans le tas, pas les blocs alloués dans le tas. En tout cas, si les conditions ci-dessus ne sont pas remplies, vous ne disposez d'une situation de fuite de quelque sorte.
Donc, une fois que vous avez exclu une fuite, vous pourriez envisager d'utiliser une meilleure allocation. Doug Lea malloc suggérée dans la question est un très bon programme d'allocation pour l'utilisation générale des applications et très robuste, la plupart du temps. Mettre une autre manière, il a été testé pour fonctionner très bien pour la plupart des applications. Cependant, aucun algorithme est idéal pour toutes les applications et toute l'algorithme de gestion de l'approche peut être rompu par le droit pathelogical conditions à l'encontre de son design.
Pourquoi êtes-vous eu un problème de la fragmentation? - Les Sources de la fragmentation des problèmes sont causés par le comportement d'une application et d'avoir à faire avec très différente de l'allocation de vie dans le même mémoire de l'arène. C'est, certains objets sont alloués et libéré régulièrement alors que d'autres types d'objets persister pendant de longues périodes de temps, tous dans le même tas.....pensez à la durée de vie plus longue que piquer des trous dans les grandes zones de l'arène et de prévenir ainsi l'fusionner des blocs adjacents qui ont été libérés.
Pour résoudre ce type de problème, la meilleure chose que vous pouvez faire est de diviser logiquement le tas en sous arènes où les durées de vie sont de plus en plus semblables. En effet, vous voulez un transitoire tas et persistante des tas, des tas groupe de choses de semblable durée de vie.
D'autres ont proposé une autre approche pour résoudre le problème qui consiste à tenter de faire la répartition des tailles de plus en plus semblables ou identiques, mais cela est moins idéale, car il crée un autre type de fragmentation interne à la fragmentation de ce qui est en effet le gaspillage de l'espace que vous avez en allouer plus de mémoire dans le bloc que vous avez besoin.
En outre, avec un bon tas de allocateur, comme Doug Lea, faisant de la taille des blocs de plus en plus semblables est inutile parce que l'allocateur va déjà faire une puissance de deux la taille de l'écopage plan de le rendre totalement inutile d'ajuster artificiellement la répartition des tailles passé à la fonction malloc () en effet, son gestionnaire de tas fait pour vous automatiquement beaucoup plus robuste que l'application sera en mesure de faire des ajustements.