2014-09-20 143 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

回答