数组的静态与动态内存分配

问题描述

哪个内存效率更高,为什么在运行时使用“new”关键字声明数组的大小进行动态内存分配与使用以下方法间的区别:

#include <iostream>

using namespace std;

int main ()
{
    int size;

    cin >> size;

    int a[size];
}

使用'new'关键字进行动态内存分配

#include <iostream>

using namespace std;

int main ()
{
    int *array {nullptr};
    
    int size;

    cin >> size;

    array = new int[size];
     
    delete [] array;
}

解决方法

在堆栈上分配内存要快得多(主要是通过更改堆栈指针)。而且您不必担心管理它,它会在函数退出时被释放。但是堆栈大小通常比堆大小小得多。对于小的局部对象,使用栈,对于大的和生命周期在函数范围之外的那些——堆。

,

两者各有利弊,取决于您想要实现的目标。当在堆栈上分配内存时,编译器会自动完成内存分配和释放,而在堆上,您必须在堆上分配和专用内存,您可以根据您的要求重新定位和调整所需的内存大小,这在堆栈上是不可能的。