2011-11-17 50 views
4

可能重複:
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]; 
    ... 
} 

N我發現我的答案,爲什麼這個在這裏工作:about the array in C

但是,我仍然有關於如何審訊。

我的意思是,代碼塊的堆棧大小應該是提前知道的嗎?所以肯定,Test_array不能存儲在堆棧上...

編譯器是否在數組中使用堆內存來進行新的/ malloc-delete/free操作?

在這種情況下,如果在堆上找不到足夠的內存,這種代碼是否會拋出bad_alloc異常?

+3

這不是標準的C++。可變長度數組是一些編譯器支持的擴展。 – aschepler

+0

之前被問過許多次。 –

+3

不是重複的:問題不是「這是否有效?」,而是「編譯器如何做到這一點?」 – aschepler

回答

5

運行時唯一的區別是堆棧指針增加了一個變量偏移量,而不是一個常量。在堆棧上「分配」內存只涉及遞增堆棧指針。編譯器是否知道這個值會影響某些優化,但這肯定是可能的。

作爲一個非常粗略的例子不同的是:

add sp <sizeof(int) * 5> 

VS

add sp <sizeof(int) * nIndex> 

做到這一點的介紹VLA-S之前是與alloca功能的方式。