![](/img/trans.png)
[英]C++ (g++ compiler) Dynamically Initializing Statically Declared Array Leads to Memory Questions
[英]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.