2010-02-22 114 views
5

与数组中元素的普通分配相比,使用动态内存分配创建数组有什么优势?动态内存分配

+3

听起来像功课吗? – 2010-02-22 15:58:23

+0

在某些平台上,动态内存区域比本地(或自动)存储区域大得多。通常而言,*堆*可能允许比* stack *或* application local *存储更大的存储空间。 – 2010-02-22 18:33:43

回答

3

1)动态存储器分配允许大量自由的,当涉及到管理对象的生命周期。

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

9

您不必事先知道数组的大小,或者过度分配内存来计算大型数组。这使您的程序在使用内存时更加高效。

4

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

2

int x[100];是固定的大小,你不能展开。它的生命周期与创建它的环境有关,并且不能通过不同的功能/方法传递。

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

std::vector包装了很多这个魔术重新分配代码,可能这是你应该在你的代码中使用。

0

动态分配的数组的基本优点是,可以判断在运行时动态分配的数组的大小,而且,由于该阵列是在堆上而不是堆,它可以比静态较大阵列。尽管如此,记住这一点非常重要,std :: vector可以为你工作。你应该在哪些场合展示你自己的数组类是少之又少的。当你分配数组则数组的大小在编译时给予使用std ::载体,

0

。在那种情况下,大多数情况下,无论是分配更多内存还是分配更少内存。

这是动态分配内存可以帮助你,让你可以实际分配仅是真正需要这些内存块,并,当你与内存管理做,你可以释放内存。

0

简而言之,它有助于程序员创建用户所说的大小数组。