2

我有一段代码在哪里

for ( ; ; )
{

  char *buf;

  /* Some code */
}

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

4

4 回答 4

8

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

于 2009-03-12T08:31:49.660 回答
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
于 2009-03-12T08:46:09.093 回答
0

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

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

于 2009-03-12T08:31:31.813 回答
0

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

于 2009-03-13T18:38:58.760 回答