引用以下代码,我对 var2
局部变量的分配有一些疑问。
什么时候分配局部变量
var2
的内存?var2
是否会在函数被调用或条件满足且控制进入if(Threshold > 5)
时分配?将
var2
保持在condition内是否只是限制了局部变量的范围?将
var2
保持在条件内是否会提高处理速度,因为每次调用函数时都不会分配和取消分配变量?
void fun1(int Threshold)
{
int var1 = 0;
if(Threshold > 5)
{
int var2 = 0;
}
}
最佳答案
根据优化级别,变量可能根本不会分配。优化编译器可以丢弃所有未使用的变量,并为两个具有非重叠生命周期的变量重用内存。
检查汇编程序输出(gcc -S file.c
),通常可以看到在函数入口后立即分配的所有已用变量:
sub r1, $108 ;; stack space needed for array[100] (and some)
对应于:
void func(bool a)
{
if (a)
{
char array[100];
subfunc(array, 100);
} else {
char array2[15];
subfunc2(array2, 15);
}
}
关于c - 嵌套 {} 内局部变量的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702717/