c - nedmalloc:mem>=fm 从何而来?

标签 c debugging memory-management winapi nedmalloc

在我的应用程序中实现 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/

相关文章:

c - Windows 文件系统筛选器驱动程序

c - 如何在 C 中获取我的非环回网络 ip 地址?

Eclipse 调试器在切换文件时失去焦点

iphone - NSArray 内存泄漏!无法获取为什么?

c++ - 如何禁止对象的构造?

C++ 为变量分配异常大的内存

python - C 中两个相邻的方括号有什么作用

c - 有符号无符号减法

c - 如何输出输入变量的名称

PHPMailer 仅在 SMTPDebug = true 时发送电子邮件