动态内存分配

5
动态内存分配创建数组相比于普通的元素分配有什么优势?

在某些平台上,动态内存区域比本地(或自动)存储要大得多。通俗来说,可能允许比应用程序本地存储更大的存储空间。 - Thomas Matthews
7个回答

9
您无需事先知道数组的大小,也不需要为大型数组而过度分配内存。这使得您的程序在使用内存方面更加高效。

4

动态创建的数组通常可以比自动创建的数组更大,并且具有更长的生命周期。但与使用std::vector相比,两者都具有许多不利之处。


3

1) 动态内存分配允许在管理对象的生命周期时具有很大的灵活性。

2) 数组的大小也可以更自由地控制。


2

int x[100]; 是固定大小的,无法扩展。它的生命周期与创建它的上下文相关,并且不能在不同的函数/方法之间传递。

int *x = new int[n]; ... delete[] x; 可以重新分配大小,因此可以调整大小,而且n不需要在编译时知道(所以您可以询问用户她需要多少个数字并创建该大小的数组)。正如@Neil Butterworth所指出的那样,这是在堆上创建数组,可以更大,而静态变量则在堆栈上创建数组。

std::vector 包装了很多这种神奇的重新分配代码,可能这是您应该在代码中使用的东西。


0
动态分配数组的基本优点是您可以在运行时确定动态分配数组的大小,并且由于该数组位于堆上而不是栈上,因此它可以比静态数组更大。但重要的是要记住,std::vector已经为您完成了这项工作。您应该自己编写数组类的情况很少。请使用std::vector。

0
简而言之,它帮助程序员创建用户指定大小的数组。

0

当你分配数组时,数组的大小必须在编译时给出。在这种情况下,大多数情况下,你要么分配更多的内存,要么分配更少的内存。

这就是动态内存分配帮助你的地方,因此你可以实际上只分配那些真正需要的内存块,并且当你完成内存管理时,可以释放内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接