首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存消耗?

问内存消耗?
EN

Stack Overflow用户
提问于 2009-03-12 08:29:51
回答 4查看 311关注 0票数 2

我有一段代码

代码语言:javascript
复制
for ( ; ; )
{

  char *buf;

  /* Some code */
}

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-12 08:31:50

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

票数 8
EN

Stack Overflow用户

发布于 2009-03-12 08:46:09

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

代码语言:javascript
复制
_foo:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $40, %esp
L2:
    movl    -12(%ebp), %eax
    movl    %eax, (%esp)
    call    L_puts$stub
    jmp     L2
票数 5
EN

Stack Overflow用户

发布于 2009-03-12 08:31:32

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/637740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档