在我的应用程序中实现 nedmalloc 时,我经常遇到 nedmalloc 拒绝释放一块内存并声称它没有分配它的情况。
我正在使用 v1.06beta1_svn1151 版本。
在调试时,我发现一个特定的条件失败了,所有其他的(包括幻数)都成功了。条件是这样的:
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 的东西。然而,“选择没有被破坏”:我怀疑它真的是 nedmalloc 中的一个错误,很可能我在某处做错了什么,但我找不到它。一旦我打开 nedmalloc 的调试功能,问题就消失了。
如果这里有人了解 nedmalloc 的内部工作,您能否向我解释为什么 fm <= mem 有保证?