何时使用malloc,是否真的有必要

时间:2013-05-25 17:19:25

标签: c malloc free

我正在研究的malloc示例是

#include <stdio.h>
#include <stdlib.h>
int main()
{
 int *vec;
 int i, size;
 printf("Give size of vector: ");
 scanf("%d",&size);
 vec = (int *) malloc(size * sizeof(int));
 for(i=0; i<size; i++) vec[i] = i;
 for(i=0; i<size; i++)
 printf("vec[%d]: %d\n", i, vec[i]);
 free(vec);
}

但是我可以让程序在运行时运行,就像这个程序在C语言中编写它而不是malloc,不是吗?那么malloc在这里的用途是什么?

3 个答案:

答案 0 :(得分:4)

是动态内存分配。

非常重要的一点是你不知道你需要多少内存,因为你必须最终得到的内存量取决于用户输入。

因此,在编译时使用带有size作为其参数的一部分的malloc和size是未知的。

答案 1 :(得分:2)

此特定示例可以使用variable length arrays完成,自c99以来标准支持,现在是2011标准的可选项。虽然如果size非常大,在堆栈上分配它将无法工作,因为堆栈比可用堆内存小得多,这是malloc将使用的内存。我的这个previous post也有一些你可能会觉得有用的可变长度数组的链接。

dynamic data structures使用malloc时使用{{1}}的示例之外很难避免。

答案 2 :(得分:1)

两个问题:

首先,您可能不知道在运行时需要多少内存。使用malloc()可以让您准确分配合适的金额:不多也不少。如果没有足够的内存,你的应用程序可以优雅地“降级”。

其次,malloc()从堆中分配内存。这有时可能是一个优势。在堆栈上分配的局部变量具有非常有限的总内存量。静态变量意味着您的应用程序将始终使用所有内存,如果内存不足,甚至可能会阻止您的应用加载。