在我的应用程序中实现 nedmalloc 时,我经常遇到 nedmalloc 拒绝释放内存块的情况,声称它没有分配它。
我使用的是v1.06beta1_svn1151版本。
在调试过程中,我发现一个特定条件失败了,但所有其他条件(包括魔数(Magic Number))都成功了。条件是这样的:
if((size_t)mem-(size_t)fm>=(size_t)1<<(SIZE_T_BITSIZE-1)) return 0;
在 Win32 上这似乎等同于:
if((int)((size_t)mem-(size_t)fm)<0) return 0;
这似乎与:
if((size_t)mem<(size_t)fm) return 0;
在我的例子中,我真的看到了 mem < fm。我现在不明白的是,这个条件是从哪里来的。我找不到任何可以保证代码中任何地方的 fm <= m 的东西。然而,“select isn't broken”:我怀疑它真的是 nedmalloc 中的错误,很可能我在某处做错了什么,但我找不到它。一旦我打开 nedmalloc 的调试功能,问题就消失了。
如果这里有人了解 nedmalloc 的内部工作原理,您能向我解释一下为什么 fm <= mem 是有保证的吗?
最佳答案
我现在可以看到这一行添加了注释/* See if mem is lower in memory */并且它在 beta svn1159 中使用 #if 0 被禁用。条件不成熟,可能是错误的(它仍然留在代码的 Linux 特定部分 - 很可能在那里也有错误?)
经验教训:“beta select can be broken”。
关于c - nedmalloc:mem>=fm 从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2517136/