C99中变长数组的内存分配策略
在C99中新加入了对变长数组的支持,也就是说数组的长度可以由变量来定义。
对于下面的代码:
int main()
{
int n;
scanf("%d", &n);
int ar[n];
printf("%d\n", sizeof(ar));
return 0;
}
是可以成立的。
这与之前的C标准有很大不同,以前的数组大小只能由常量来指定,也就是编译器在编译时就可以确定为数组分配多少存储空间,一般来说,一个活动记录的大小在进入一个函数的时候就可以确定下来。这个变长数组的特性必定把数组的分配引入了运行时期,附带的,sizeof这个原来的编译期操作也不得不被带入到运行时期。那么,对于动态数组的实现,编译器必定要生成一些代码来对其进行runtime的支持,这必定有损效率。
我们暂且不去评论这种特性的优与劣。就动态数组在栈内(试验过global的变长数组不支持)的存储分配策略到底是如何,请大家发表见解。