【发布时间】:2015-04-16 20:24:08
【问题描述】:
通常说在运行时知道大小时使用 malloc,我们也可以编写
int x;
scanf("%d",&x);
char arr[x];
既然我们可以动态声明数组,为什么还要使用 malloc。
【问题讨论】:
-
@YassineHoussni 呃,巨大的断言。 “它更快”的说法甚至是错误的。动态内存分配是最慢的“原始”操作之一。通常,声明一个 VLA 几乎可以立即使用内存(它只是需要添加/减去某个数字的堆栈指针),这与
malloc()不同,它涉及通过免费存储进行搜索(可能并且经常使用具有大容量的复杂数据结构来实现)常数因子)。 -
有人还应该记住,
malloc()需要free()VLA 不需要,这对于大型数组尤其重要。
标签: c arrays dynamic static malloc