Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态内存分配_C++ - Fatal编程技术网

C++ 动态内存分配

C++ 动态内存分配,c++,C++,与数组中元素的普通分配相比,使用动态内存分配创建数组有哪些优点?1)动态内存分配在管理对象的生命周期时提供了很大的自由度 2) 还可以更自由地控制阵列的大小。您不必事先知道阵列的大小,也不必过度分配内存来处理大型阵列。这使程序的内存使用效率更高。动态创建的数组通常比自动创建的数组大,并且具有更长的生存时间。但与使用std::vector相比,两者都有许多缺点。intx[100]的大小是固定的,您无法展开它。它的生存期与创建它的上下文相关,不能在不同的函数/方法之间传递 int*x=newint[

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

1)动态内存分配在管理对象的生命周期时提供了很大的自由度


2) 还可以更自由地控制阵列的大小。

您不必事先知道阵列的大小,也不必过度分配内存来处理大型阵列。这使程序的内存使用效率更高。

动态创建的数组通常比自动创建的数组大,并且具有更长的生存时间。但与使用std::vector相比,两者都有许多缺点。

intx[100]的大小是固定的,您无法展开它。它的生存期与创建它的上下文相关,不能在不同的函数/方法之间传递

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


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

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

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


这就是动态内存分配帮助您解决问题的地方,这样您实际上可以只分配真正需要的内存块,当您完成内存管理时,您可以释放内存。

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

在某些平台上,动态内存区域比本地(或自动)存储大得多。通常,堆允许比堆栈或应用程序本地存储更大的存储。