2011-11-28 103 views
1

我知道一個連續的內存塊被分配給一個數組。對象數組如何存儲在內存中?

我的第一個問題是何時數組元素是一個對象而不是內置類型,什麼被存儲在爲數組保留的連續內存?該對象的指針或該對象的實際數據?我的猜測是指針存儲在數組中,實際的對象隨機存儲在堆中。我對麼?

我的第二個問題是現在我們想爲一個對象數組保留一個指定的內存(例如,共享內存)。達到此目的的最佳方法是什麼?我應該將指定內存中的實際對象逐個序列化並使用相對指針(例如索引)來訪問它們中的每一個?

+4

如果您有兩個問題,請發兩篇文章。 –

回答

5

根本不正確。數組T[N]包含N類型的元素T,直接存儲在連續的存儲器中。該陣列佔用N * sizeof(T)字節的內存。相反,要回答第二個問題,可以使用任何運行的N * sizeof(T)字節的內存來保存N類型爲T的元素(可能受到一些對齊限制)。

0

不,對象被存儲,除非你有一個指針數組。一般來說,c++做你所要求的,並沒有自由。

將對象存儲在共享內存中取決於對象的性質,我認爲您基本上更好地堅持純數據。

0

不,對象本身被存儲。數組的名稱只是給你一個指向第一個元素的指針,然後你可以使用指針運算來遍歷數組。

+3

如果有的話,那麼數組的名稱會給你一個數組的引用。這*可能在某些情況下衰減到指向第一個元素的指針。 –

0

我會說我依賴於某種對象的源代碼。

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的數組實際上是一個指針數組。

相關問題