当数组被正常声明时,内存是静态分配的、动态分配的还是其他分配的



例如,如果声明了一个整数数组:

int ar[12];

这里有一个整数向量:

vector<int> ar;     //OR
vector<int> ar(12);

无论哪种情况,内存是在编译时还是在运行时分配给数组的?我知道C++STL中的向量类使用动态内存分配,但普通数组呢?还有:

int n;
cin >> n;
char ar[n];

如果内存分配是在编译时进行的,那么这是如何工作的呢?我在网上找不到任何东西。

"正常";数组在编译时将具有已知的大小,这意味着编译器可以(并且将(确保有空间容纳它们。该空间可能不会在可执行程序内部分配,而是在运行时分配(例如,函数内部的局部变量(。

向量的大小在编译时是未知的,它是将分配内存的向量构造函数(如果被要求,如vector<int> ar(12);(。向量的内存将始终在堆中动态分配。

还有std::array,它是一个围绕编译时数组的C++标准容器。当涉及到规模和分配时;正常的";数组,但由于它也是一个标准容器对象,因此可以与为其设计的函数和算法一起使用。

更让人困惑的是,有些东西是";静态";在C++中有一个特殊的含义,所以说一个数组是";静态地";分配可能意味着不同的东西,取决于一个观点。然而;"静态分配";似乎通常用于数组之类的东西,其内存由编译器及其生成的代码分配和处理。

最新更新