Lors de l'implémentation de nedmalloc dans mon application, je suis fréquemment confronté à une situation où nedmalloc refuse de libérer un bloc de mémoire, affirmant qu'il ne l'a pas alloué. J'utilise la version v1.06beta1_svn1151. Pendant le débogage, je suis arrivé au point où je vois une condition particulière qui échoue, tous les autres (y compris les nombres magiques) réussissent. La condition est la suivante:nedmalloc: d'où vient mem> = fm?
if((size_t)mem-(size_t)fm>=(size_t)1<<(SIZE_T_BITSIZE-1)) return 0;
Sur Win32 cela semble être équivalent à:
if((int)((size_t)mem-(size_t)fm)<0) return 0;
qui semble être le même que:
if((size_t)mem<(size_t)fm) return 0;
Dans mon cas, je vois vraiment mem < fm. Ce que je ne comprends pas maintenant, c'est d'où vient cette condition. Je ne peux rien trouver qui garantirait le fm < = m n'importe où dans le code. Pourtant, "sélectionner n'est pas cassé": je doute que ce soit vraiment un bug dans nedmalloc, très probablement je fais quelque chose de mal quelque part, mais je ne peux pas le trouver. Une fois que j'ai activé les fonctionnalités de débogage de nedmalloc, le problème disparaît. Si quelqu'un comprend le travail interne de nedmalloc, pourriez-vous m'expliquer pourquoi fm < = mem est garanti?
Je ne trouve pas cela dans le code source nedmalloc actuel. Quelle version utilisez-vous? – Thomas
Fou. Je ne m'attendais pas upvote pour ce genre de questions techniques détaillées minutes, esp. pas bientôt. Soit il y a quelqu'un là-bas qui aime et comprend ces choses, ou les programmeurs de singe sont déjà là sur le SO, des questions aléatoires à la hausse? (Mais comment diable ont-ils eu assez de réputation pour voter?) Quoi qu'il en soit, j'espère que quelqu'un va répondre - dans ce cas, c'est plus important pour moi que la réputation. – Suma
vous avez posé une question bien décrite, qui devrait donner lieu à quelques explications sur un problème intéressant comme la gestion de la mémoire, donc pas étonnant que quelqu'un vous a mis à jour. – Francesco