![](/img/trans.png)
[英]cpp - representing an array of variable-sized static stack based arrays
[英]Do variable-sized elements of statically- or stack-allocated arrays reside in the heap space?
以下可能不依賴於平台,但無論如何我都會在Win 10 GCC上修復它。
假設您在main()的靜態內存空間中創建一個數組或向量,其中包含每個可以變量大小的元素:
RADIAL_UNITS = 1000000;
static vector<Pearl> necklace[RADIAL_UNITS] = { };
//each element is a variable-sized vector, which can consist of anywhere from 1-50 Pearl objects
或者在main()中的堆棧上分配(假設堆棧空間設置為允許至少1000000個內存地址):
vector<Pearl> necklace[RADIAL_UNITS] = { };
我假設,在運行時, necklace
由RADIAL_UNITS
連續的內存地址組成,指向vector<Pearl>
元素。 我不清楚的是(i)向量元素所在的內存空間(我懷疑堆空間) 。
我也感興趣的附帶問題:
我也不清楚(ii)編譯器如何知道元素的大小是可變的。 STL容器內部是否有定義的內容可以傳達此信息? 如果它們是固定大小的,我假設它們在字面上連續存在於我們分配數組的任何區域(第二種情況,即堆棧上的分配,可能會導致段錯誤,除非放大的默認堆棧空間) 。 (iii)我是否可以修復大小為50*sizeof(Pearl)
的向量元素,以便將它們分配到陣列最初定義為的相同內存空間中? 珍珠類型由兩個烙印點編號組成,因此它們具有固定的尺寸。
我不清楚的是
vector
元素所在的存儲空間
無論vector
本身被分配的空間(用於跟蹤其可變長度數組中的元素的固定大小的數據結構), vector
的元素總是駐留在動態存儲器中,通常稱為“堆”。
我也不清楚編譯器如何知道元素是可變大小的。 [...]如果它們是固定大小的,我假設它們在字面上連續存在於我們分配數組的任何區域。
vector
對象本身具有固定的大小。 它充當可變大小數組的“錨”,它總是動態分配。 編譯器無需特殊處理。
我可以修復尺寸為
50*sizeof(Pearl)
的矢量元素嗎?
你不能用vector
做,但是array
允許你這樣做:
static array<Pearl,50> necklace[RADIAL_UNITS];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.