分配我真的很好奇alloca()
功能是如何工作的,因此,如下我寫了一個簡單的測試程序:哪裏變長數組/ ALLOCA堆棧
int test() {
int a = 0;
int e;
char tmp2[a]; //alloca
int d;
char* tmp3 = new char[2];
tmp2[100] = 1;
return 0;
}
int main(int argc, char** argv) {
test();
return 0;
}
根據該文件,alloca()
將分配內存在堆棧中。我使用gdb運行程序,並找出(char*)&tmp2 - (char*)a = -44
,這意味着它們之間有44個字節,而地址e-a
,d-e
,tmp3-d
之間的距離是4個字節。我真的無法理解編譯器如何在堆棧中分配一個可變長度的數組,並希望有人能告訴我這44個字節的含義。
您的代碼不包含對稱爲'alloca'的函數的調用。但是,它包含'new',它動態地分配內存。這不會發生在「堆棧」上。 – Andrew
你的測試根本不會調用'alloca()'... –
非常抱歉,我使用\「char tmp2 [a];」它分配一個可變長度的數組,與alloca相同 –