我知道一個連續的內存塊被分配給一個數組。對象數組如何存儲在內存中?
我的第一個問題是何時數組元素是一個對象而不是內置類型,什麼被存儲在爲數組保留的連續內存?該對象的指針或該對象的實際數據?我的猜測是指針存儲在數組中,實際的對象隨機存儲在堆中。我對麼?
我的第二個問題是現在我們想爲一個對象數組保留一個指定的內存(例如,共享內存)。達到此目的的最佳方法是什麼?我應該將指定內存中的實際對象逐個序列化並使用相對指針(例如索引)來訪問它們中的每一個?
我知道一個連續的內存塊被分配給一個數組。對象數組如何存儲在內存中?
我的第一個問題是何時數組元素是一個對象而不是內置類型,什麼被存儲在爲數組保留的連續內存?該對象的指針或該對象的實際數據?我的猜測是指針存儲在數組中,實際的對象隨機存儲在堆中。我對麼?
我的第二個問題是現在我們想爲一個對象數組保留一個指定的內存(例如,共享內存)。達到此目的的最佳方法是什麼?我應該將指定內存中的實際對象逐個序列化並使用相對指針(例如索引)來訪問它們中的每一個?
根本不正確。數組T[N]
包含N
類型的元素T
,直接存儲在連續的存儲器中。該陣列佔用N * sizeof(T)
字節的內存。相反,要回答第二個問題,可以使用任何運行的N * sizeof(T)
字節的內存來保存N
類型爲T
的元素(可能受到一些對齊限制)。
不,對象被存儲,除非你有一個指針數組。一般來說,c++
做你所要求的,並沒有自由。
將對象存儲在共享內存中取決於對象的性質,我認爲您基本上更好地堅持純數據。
不,對象本身被存儲。數組的名稱只是給你一個指向第一個元素的指針,然後你可以使用指針運算來遍歷數組。
如果有的話,那麼數組的名稱會給你一個數組的引用。這*可能在某些情況下衰減到指向第一個元素的指針。 –
我會說我依賴於某種對象的源代碼。
class an_my_object_a {
private:
something_t something;
something_else_t something_else;
third_field_t third_field;
public:
//there are some methods
}
class an_my_object_b {
private:
an_my_object_a * d;
public:
//there are some methods
}
an_my_object_a 可以存儲其在連續存儲器中的所有數據的陣列。 an_my_object_b的數組實際上是一個指針數組。
如果您有兩個問題,請發兩篇文章。 –