动态内存分配如何在运行时分配内存?

时间:2017-01-21 14:33:29

标签: c++ c memory-management malloc dynamic-memory-allocation

int a[10];

上面的代码将创建一个包含四个int变量大小的数组&因此程序将只能存储4个整数。 现在考虑以下命令

int *a,*b,*c,*d;
a= (int *)malloc(sizeof(int));
b= (int *)malloc(sizeof(int));
c= (int *)malloc(sizeof(int));
d= (int *)malloc(sizeof(int));

上面的代码部分将创建四个int类型指针&将分配它们的int大小的内存。 我了解到动态内存分配在朗姆酒时分配内存。 我想知道,无论使用数组还是malloc(动态内存分配),用户将只获得四个int大小的空间来存储。如果我们排除它是一个带有int size memory的指针变量,那么将是什么使用动态内存分配。在这两种情况下,用户将只获得四个int空格&要获得更多,他将需要访问源代码。那么我们为什么要使用malloc或动态内存分配?

4 个答案:

答案 0 :(得分:1)

考虑

int a,*b;
cin >> a;
b= (int *)malloc(a*sizeof(int));

用户键入一个号码a并获取a整数。程序员或编译器都不知道数字a

正如评论中所指出的,这在C ++中仍然是不好的风格,如果可能的话使用std::vector。即使new仍然优于malloc。但我希望(坏)示例有助于澄清动态内存分配背后的基本思想。

答案 1 :(得分:0)

int a[10];

上面的代码行将分配一个10 int个自动存储持续时间的数组,如果它在本地范围内。

int *a,*b,*c,*d;

但是,上面的内容也将分配4个指针int自动存储持续时间,同样如果它在本地范围内。

a= (int *)malloc(sizeof(int));
b= (int *)malloc(sizeof(int));
c= (int *)malloc(sizeof(int));
d= (int *)malloc(sizeof(int));

最后,上面将动态地为每个指针分配int变量。因此,上面的每个指针都将指向一个int变量。

请注意,与静态内存分配不同,动态分配的内存可以在运行时释放和调整大小。超出范围时释放自动存储持续时间的内存,但无法调整大小。

答案 2 :(得分:0)

你是对的,这只是记忆。但是使用方法存在差异。

在一般情况下,您不一定提前知道所需的内存量,然后知道可以安全释放此类内存的时间。编写malloc及其朋友,以便他们可以跟踪以这种方式使用的内存。

但在许多特殊情况下,您恰好会提前知道您需要多少内存以及何时需要它。例如,您知道在运行简单循环时需要一个整数作为循环计数器,并且在循环执行完毕后您将完成它。虽然malloc及其朋友仍然可以在这里为您工作,但局部变量更简单,更不容易出错并且可能更有效。

答案 3 :(得分:-1)

如果您使用C编程,则无需投射malloc的结果。 我建议你阅读:Do I cast the result of malloc?

然后用4个指针在你的代码中做什么是不必要的;实际上,你可以只用int分配一个4 malloc的数组:

int *a;
a = malloc(4 * sizeof(int));
相关问题