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

内存分配
EN

Stack Overflow用户
提问于 2010-10-04 22:00:06
回答 6查看 560关注 0票数 2

当我们在一个函数(这里不是main )内“定义”一个变量时,内存分配是在运行时完成的,还是加载程序为我们服务的??

当我遇到以下情况时:

代码语言:javascript
复制
int f()
{
     int a=10;

     ........
}

main()
{
     int i;
     scanf("%d",&i);
     while(--i)
         f();
      ..........
}

函数f()中的'a‘是否创建了'i’次??那么它是动态分配吗??

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-04 22:02:59

在每次调用f()时都会生成局部变量a。它是为f()设置“堆栈框架”的一部分,并且(几乎)不花费任何时间。它会占用一些堆栈空间,但不会超过int所需的空间。

while(--i) f();期间,函数f()被调用了10次,每次都有一个“新的”a占用相同的内存点。我们不把这种动态分配叫做,它叫做堆栈,本地或自动分配。

票数 11
EN

Stack Overflow用户

发布于 2010-10-04 22:02:52

这是一个堆栈分配,这意味着在堆栈上为整数保留了位置-它不是像“在堆上找到4个空闲字节并为我分配它们”那样分配的。

票数 1
EN

Stack Overflow用户

发布于 2010-10-04 22:08:44

Q1。是的..它将在Stack中被分配i次。

Q2。不..。使用new关键字分配的内存是动态内存分配,它将在堆中分配,而您提供的示例中的分配是堆栈分配的。

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

https://stackoverflow.com/questions/3855944

复制
相关文章

相似问题

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