2015-09-26 39 views
0
typedef struct sample_s 
{ 
    int sampleint; 
    sample2 b; 
} sample; 

typedef struct sample2_s 
{ 
    int a; 
    int b; 
    int c; 
    int d; 
} sample2; 

int main() 
{ 
    sample t; 
} 

在這個例子中,當我創建樣本結構的實例t時,我也會在內存中加載sample2。關於內存中結構加載的精度

問題是,如何才能將sampleint加載到內存中? 有沒有辦法只加載內存中的一部分結構? 如果答案是,就像我認爲的那樣,繼承。它是如何工作的?由於散列表在執行過程中會浪費時間嗎?

我在問這些問題,因爲我想開發一個DOD(數據導向設計)程序,我想更好地理解結構如何在內存中管理。

謝謝

+0

'遺產'是什麼意思?你的意思是'傳統' - '默認'? – Abhi

+0

我想要從樣本中擦除sample2b,並使結構sample2從樣本(struct sample2:public樣本)繼承,就像通過從樣本2投射樣本的實例一樣。我只需存儲sampleint。但如果我這樣做,我不知道它是否優化(因爲在DOD發展中你必須小心遺產和虛擬)這就是爲什麼我在這篇文章 – FreeYourSoul

+0

我這樣問這些問題!好! '遺產'的意思是繼承 - – Abhi

回答

0

如果你只是想複製sampleint,你可以聲明int s = x.sampleint;您還可以memcpy()一系列由offsetof<stddef.h>定義來獲得一定範圍的連續成員變量的內存。

看來,如果你想要的是下列之一:

聲明,在C++中,樣品可以從繼承samplebase類型。

聲明僅用於要複製的單個成員的存儲。

讓sample保存一個指向sample2的指針,如果你沒有分配一個指針,將它設置爲NULL。

將樣本聲明爲代碼塊中的臨時文件,複製所需的部分,讓內存在超出範圍時收回。

+0

如果我做了x.sampleint,它不會改變b(sample2)在聲明x時存儲在內存中的事實。這是我想要避免的。 – FreeYourSoul

+0

我已經添加了一些建議。 – Davislor