可能重复:
Dynamic array in Stack?
How do compilers treat variable length arrays
我在辅导的人写了一段看起来像这样的代码,编译,运行正常,让我觉得这个过程中是一个完整的C ++初学者:
int main(int argc, char** argv)
{
int Index=0;
cin>>Index;
int Test_array[Index][Index];
...
}
现在,我在这里找到了我的答案:about the array in C
但是,我仍然对如何进行审讯。
我的意思是,代码块的堆栈大小应该提前知道吗?当然,Test_array无法存储在堆栈中......
编译器是否在后台执行新的/ malloc-delete / free操作以使用堆内存作为数组?
在这种情况下,如果在堆上找不到足够的内存,这样的代码会抛出bad_alloc异常吗?
答案 0 :(得分:5)
运行时唯一的区别是堆栈指针增加了一个变量偏移量,而不是一个常量。堆栈上的“分配”内存只不过是递增堆栈指针。编译器是否知道此值可能会影响某些优化,但肯定是可能的。
作为一个非常粗略的例子,区别在于:
add sp <sizeof(int) * 5>
VS
add sp <sizeof(int) * nIndex>
在引入VLA-s之前采用alloca
函数的方法。