【问题标题】:Memory Consumption?内存消耗?
【发布时间】:2010-10-12 20:54:42
【问题描述】:

我有一段代码在哪里

for ( ; ; )
{

  char *buf;

  /* Some code */
}

这里的问题是代码在每次循环循环时分配内存。 我的意思是指针在循环时至少会保留 4 个字节。

【问题讨论】:

    标签: c memory consumption


    【解决方案1】:

    指针的空间会在栈上分配,但会在每次迭代结束时弹出,所以你不用担心。

    【讨论】:

      【解决方案2】:

      我认为任何合理的编译器都会优化分配。例如,看一下 GCC 生成的程序集:

      _foo:
          pushl   %ebp
          movl    %esp, %ebp
          subl    $40, %esp
      L2:
          movl    -12(%ebp), %eax
          movl    %eax, (%esp)
          call    L_puts$stub
          jmp     L2
      

      【讨论】:

        【解决方案3】:

        char* 将在每次迭代时重新分配,是的,但它也会在下一次迭代之前被释放,因此至少这不会导致内存泄漏(除非您在该循环中使用 malloc 而没有释放)。

        无论如何,出于性能原因,您应该将其置于 for 循环之外(尽管编译器可能对此进行了优化并且不会为指针重新分配内存,但我不会指望这一点)。

        【讨论】:

        • 那是微优化。让编译器为你做这件事。
        【解决方案4】:

        您可能需要担心的是 buf 指向的内存。你剪掉了实际使用 buf 的代码,但是如果你使用 malloc() 或类似方法来创建缓冲区,除非你也 free() 它,否则它不会被释放。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-03
          • 2012-11-24
          • 2013-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多