2014-09-20 148 views
0

你好我想知道爲什麼這個工程,因爲在教程和它總是列出數組必須是固定的大小,除非動態使用malloc一個。C(動態)數組(固定大小)

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char **argv) { 
     if(argc < 2) 
     return 0; 

     int tmp[ atoi(argv[1]) ]; 


     printf("sizeof tmp equals to %d\n", sizeof tmp); 
     return 0; 
} 

這樣做時,ASM級別的後臺會發生什麼情況?它是如何工作的? 它是否分配在堆棧中啓動程序時給出的大小以及堆棧的最大值是多少?

這是比使用malloc更昂貴的內存?

在此先感謝。

+1

這是一個稱爲[可變長度數組]的C99特徵(http://en.wikipedia.org/wiki/Variable-length_array)。 – Kninnug 2014-09-20 16:29:39

+0

在彙編程序級別,像調整變量值來調整堆棧指針應該這樣做。這可能是在一個街區入口處完成的。最大值取決於系統,沒有便捷的方法可以預先知道這是否會成功。如果您使用的長度爲0或更小,則行爲未定義。就時間而言,它通常比'malloc'便宜,而且在空間方面可能會稍微便宜一些(通常堆棧內存多於堆棧內存)。相關:GNU'alloca'。 – mafso 2014-09-20 18:46:11

回答