簡體   English   中英

靜態或堆棧分配的數組的可變大小元素是否駐留在堆空間中?

[英]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] = { }; 

我假設,在運行時, necklaceRADIAL_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.

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