阵列存储发生了什么?

时间:2011-11-17 13:24:16

标签: c++ arrays

  

可能重复:
  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异常吗?

1 个答案:

答案 0 :(得分:5)

运行时唯一的区别是堆栈指针增加了一个变量偏移量,而不是一个常量。堆栈上的“分配”内存只不过是递增堆栈指针。编译器是否知道此值可能会影响某些优化,但肯定是可能的。

作为一个非常粗略的例子,区别在于:

add sp <sizeof(int) * 5>

VS

add sp <sizeof(int) * nIndex>

在引入VLA-s之前采用alloca函数的方法。