当我们在一个函数(这里不是main )内“定义”一个变量时,内存分配是在运行时完成的,还是加载程序为我们服务的??
当我遇到以下情况时:
int f()
{
int a=10;
........
}
main()
{
int i;
scanf("%d",&i);
while(--i)
f();
..........
}函数f()中的'a‘是否创建了'i’次??那么它是动态分配吗??
发布于 2010-10-04 22:02:59
在每次调用f()时都会生成局部变量a。它是为f()设置“堆栈框架”的一部分,并且(几乎)不花费任何时间。它会占用一些堆栈空间,但不会超过int所需的空间。
在while(--i) f();期间,函数f()被调用了10次,每次都有一个“新的”a占用相同的内存点。我们不把这种动态分配叫做,它叫做堆栈,本地或自动分配。
发布于 2010-10-04 22:02:52
这是一个堆栈分配,这意味着在堆栈上为整数保留了位置-它不是像“在堆上找到4个空闲字节并为我分配它们”那样分配的。
发布于 2010-10-04 22:08:44
Q1。是的..它将在Stack中被分配i次。
Q2。不..。使用new关键字分配的内存是动态内存分配,它将在堆中分配,而您提供的示例中的分配是堆栈分配的。
https://stackoverflow.com/questions/3855944
复制相似问题