Malloc 与 C 中的静态数组

Malloc vs static array in C

人们常说在 运行 知道大小时使用 malloc 我们也可以这样写

int x;
scanf("%d",&x);
char arr[x];

既然我们可以即时声明数组,为什么还要使用 malloc。

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

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

所能达到的数量级高出许多数量级的限制。

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

malloc() 起源于此之前。

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

OTOH,gcc 在堆栈本身中为 VLA 分配 space。