记忆消耗?

时间:2009-03-12 08:29:51

标签: c memory consumption

我有一段代码

for ( ; ; )
{

  char *buf;

  /* Some code */
}

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

4 个答案:

答案 0 :(得分:8)

指针的空间将在堆栈上分配,但它会在每次迭代结束时弹出,因此您不必担心它。

答案 1 :(得分:5)

我认为任何合理的编译器都会优化分配。例如,看看GCC生产的组件:

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

答案 2 :(得分:0)

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

无论如何,出于性能原因,你应该将它从for循环中取出(尽管编译器可能会优化它并且不会为指针重新分配内存,但我不会指望它。)

答案 3 :(得分:0)

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