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。
人们常说在 运行 知道大小时使用 malloc 我们也可以这样写
int x;
scanf("%d",&x);
char arr[x];
既然我们可以即时声明数组,为什么还要使用 malloc。
写char arr[x];
会在栈上分配内存。
堆栈的大小通常限制在 1MB 左右。如果超过此预定义的数量,您将收到运行时错误。一些编译器将允许您更改堆栈大小,但您最终仍然会达到比 malloc
.
VLA
[可变长度数组]是C99
以后的概念。
malloc()
起源于此之前。
此外,malloc()
和家族从堆中分配内存。它不使用相对有限的堆栈space。
OTOH,gcc
在堆栈本身中为 VLA
分配 space。