Malloc与C中的静态数组

时间:2015-02-16 10:38:24

标签: c arrays dynamic static malloc

通常说在运行时知道大小时我们也可以写

来使用malloc
int x;
scanf("%d",&x);
char arr[x];

所以为什么在我们可以动态声明数组时使用malloc。

2 个答案:

答案 0 :(得分:3)

char arr[x];将在堆栈上分配内存。

堆栈的大小通常限制在1MB左右。如果超过此预定义金额,您将收到运行时错误。有些编译器会允许你改变堆栈大小,但是你最终仍会达到比malloc更多的数量级的限制。

答案 1 :(得分:1)

VLA [可变长度数组]是C99以后的概念。

malloc()起源于此之前。

此外,malloc()和family从堆中分配内存。它不使用相对有限的堆栈空间。

OTOH,gcc在堆栈本身为VLA s分配空间。