我有一段代码
for ( ; ; )
{
char *buf;
/* Some code */
}这里的问题是,当代码在循环中循环时,是否会每次分配内存。我的意思是,当指针循环时,至少有4个字节将保留给它。
发布于 2009-03-12 08:31:50
指针的空间将在堆栈上分配,但它将在每次迭代结束时弹出,因此您无需担心它。
发布于 2009-03-12 08:46:09
我认为任何合理的编译器都会优化分配。例如,看看由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-12 08:31:32
char*将为每次迭代重新分配,是的,但它也将在下一次迭代之前被释放,因此至少这不会导致内存泄漏(除非您在该循环中使用不带空闲空间的malloc )。
无论如何,出于性能原因,您应该将它放在for循环之外(尽管编译器可能会对此进行优化,并且不会为指针重新分配内存,但我不会指望这一点)。
https://stackoverflow.com/questions/637740
复制相似问题