代码之家  ›  专栏  ›  技术社区  ›  Suma

nedmalloc:mem>=fm来自哪里?

  •  2
  • Suma  · 技术社区  · 16 年前

    我使用的是v1.06beta1\u 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<=我在任何地方的代码。然而,“select未被破坏”:我怀疑它是否真的是nedmalloc中的一个bug,很可能我在某个地方做错了什么,但我找不到它。一旦我打开nedmalloc的调试特性,问题就消失了。

    如果这里有人了解nedmalloc的内部工作,你能解释一下为什么fm<=mem保证?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Suma    16 年前

    经验教训:“

        2
  •  1
  •   Alok Singhal    16 年前

    我是这么想的 SIZE_T_BITSIZE size_t 类型,所以按1移位 SIZE_T_BITSIZE - 1 会给你 (SIZE_MAX + 1) / 2 (数学)值。所以条件是测试 (size_t)mem - (size_t)fm (大小\u MAX+1)/2 .

    (int)((size_t)mem - (size_t)fm) < 0 . 进一步,如果 mem 和/或 fm 被投给 大小\u t (size_t)mem 小于 (size_t)fm , 永远不会小于0。等于差 mem - fm SIZE_MAX 1 ,为正值。将该值转换为 int 可能溢出,这是实现定义的,也可能不溢出,在这种情况下,您将得到一个正值。

    所以,回答你的问题,如果 小于 ,你可能有窃听器 之前 这一点。

    是什么 m M 你的意思是 记忆 ?

    :看起来像是 nedmalloc commented out in the latest version .