簡體   English   中英

正常聲明數組時,memory 是靜態分配、動態分配還是其他方式分配?

[英]When an array is declared normally, is the memory allocated statically, dynamically or otherwise?

例如,如果聲明了 integer 數組:

int ar[12];

這里是一個整數向量:

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

無論哪種情況,memory 是在編譯時還是運行時分配給數組的? 我知道 C++ STL 中的向量 class 使用動態 ZCD69B4957F06CD818D7BF3D6198E 普通數組分配什么? 還:

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

如果 memory 分配是在編譯時分配的,那么這是如何工作的? 我在網上搜不到任何東西。

“正常” arrays 將具有在編譯時已知的大小,這意味着編譯器可以(並且將)確保它們有空間。 該空間可能不會在可執行程序內部分配,而是在運行時分配(例如,函數內部的局部變量)。

向量的大小在編譯時是未知的,它的向量構造函數將分配 memory (如果被要求,如vector<int> ar(12);的情況)。 向量的 memory 將始終在堆中動態分配。

然后還有std::array ,它是圍繞編譯時數組的 C++ 標准容器。 當涉及到大小和分配時,它就像一個“普通”數組,但由於它也是一個標准容器 object 它可以與為這些設計的函數和算法一起使用。

更令人困惑的是,“靜態”的東西在 C++ 中具有特殊含義,因此說數組是“靜態”分配的可能意味着不同的事情,具體取決於一個觀點。 但是,“靜態分配”似乎通常用於 arrays 之類的東西,其 memory 由編譯器及其生成的代碼分配和處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM