空類,sizeof是多少,空類,sizeof是多少

2022-06-30 14:30:05 字數 4785 閱讀 1456

1樓:標苦運先

>=1byte

理由:設想如果為0,則該類的兩個物件例項該如何區分?豈不都在記憶體中的同乙個地方?!

例如:class a;(是沒有任何成員的空類)則a a,b;

顯然 &a != &b!但是,如果sizeof(a)等於0則無法分配記憶體來在執行時區分多個同型別的物件。

所以,編譯器對這樣的類的記憶體布局中預設新增1個位元組(或多個,一般小於等於機器的位址匯流排位數,依賴於編譯器的具體實現)。

2樓:匿名使用者

因為必須用1個byte存放不同物件的位址.使得這個空類的各個objects在記憶體中有不同的位址.

詳情請看《深度探索c++物件模型》

3樓:匿名使用者

空類就是1,即'\0'

4樓:匿名使用者

同意"標苦運先"的說法,在effective c++(或more effective c++,具體哪個記不清楚了)中有介紹.

5樓:匿名使用者

記得有本書講c++機巧方面的,中文名是叫<

你對這方面感興趣,不會是這乙個問題的,建議你買本看看

6樓:匿名使用者

1byte

vc6.0下面試過的

c++中乙個空類的大小為什麼是1?

7樓:天雲小店

這就是例項化的原因(空類同樣可以被例項化),每個例項在記憶體中都有乙個獨一無二的位址,為了達到這個目的,編譯器往往會給乙個空類隱含的加乙個位元組,這樣空類在例項化後在記憶體得到了獨一無二的位址,所以空類所佔的記憶體大小是1個位元組。

#include

using namespace std

class a{};

int main()

{ cout<<"sizeof(a)="<程式執行的輸出結果為:

sizeof(a)=1

以上程式驗證了空類所佔記憶體為1個位元組。

為什麼sizeof乙個空的結構體,或者空的類,結

8樓:風若遠去何人留

乙個型別 在定義物件的時候,或者說定義變數的時候, 系統需要給它分配位址。

而如果沒有實際記憶體大小,那麼分配位址就是無意義的, 在釋放記憶體時會帶來麻煩。

所以就分配了乙個最小記憶體空間1.

c++空類佔幾個位元組

9樓:射手夏末之殤

這個情況情況比較複雜,舉乙個missgya的例子,在電腦上是c是8位元組,也就是乙個指向虛表的指標的大小,關於這個,再補充一點知識:

空類最常用於作為基類,那時候為了對齊實際可能佔4個位元組或以上。但這樣會浪費空間,尤其是多重繼承多個空基類的時候。所以編譯器有空基類優化(empty base class optimization, ebco)[1],令無非靜態資料成員、無虛函式的基類實際佔0位元組。

因為bs大大當年說要確保兩個不一樣的物件擁有不同的位址---「to ensure that the addresses of two different objects will be different.」 就用那1byte來在記憶體中佔用不同位址了。:)

又因為這些空class沒有賦值的意義,所以就沒必要佔用更多記憶體。

10樓:

普通的空類大小是1。如果有虛繼承,則子類的大小會是4。

如下:#include

using namespace std;

class a{};

class b : public a{};

class c : virtual public a{};

int main()

{cout<< sizeof(a)<

11樓:匿名使用者

這個問題有些奇葩,比如

class a

{};class b

;a是1,b也是1...那個1個位元組只是讓編譯器識別不同的類用的......gcc 4.8測試...

另外加上虛繼承的話情況更複雜,像missgya的例子,在我的機子上測試是c是8位元組,也就是乙個指向虛表的指標的大小,是作業系統相關的

12樓:匿名使用者

空類(除了靜態資料成員,沒有任何其他資料成員的類)佔乙個位元組

13樓:匿名使用者

記得只能保證一定不是0。

通常情況下會是1,但是沒有這個限制,所以最好不要依賴這個1來編寫程式。

c++ sizeof(類)的大小?

14樓:匿名使用者

類的大小主要和其成員變數以及虛函式指標有關,與普通成員函式無關a沒有任何成員變數和虛函式,相當於空類,記憶體中用1位元組表示b和c都虛擬繼承a,因此都有乙個虛擬繼承表指標,因此大小為該指標大小4

d有兩個虛擬繼承表指標,因此大小為8

15樓:匿名使用者

這個 不一定有個合理的公式 給你的 ,只要 尺寸 不小於 其所有成員的尺寸和,編譯器可以 任意給它定尺寸,取決於 編譯器想在每個物件上儲存多少 東西 。例如:在 c++上是否啟用 rtti,其sizeof值就可能不同

所以盡量避免手工去計算 尺寸,用 sizeof算即可

c++ 中空類物件為什麼佔乙個位元組

16樓:匿名使用者

為了區分不同的物件!

c++ sizeof()問題

17樓:匿名使用者

在用sizeof求大小的時候,位元組對齊的概念只對復合資料型別(類和結構體等)有效,因為復合資料型別才有資料型別的記憶體布局的概念,其餘的都是實際佔記憶體空間的大小。

虛函式佔空間是因為類中儲存了虛函式表指標,另外我覺得普通函式應該也是要佔空間的,我公尺有實驗過,你可以構造更複雜一點的類來實驗看看

18樓:

怎麼會是9了。你乙個函式,得分配乙個指標,4個位元組。你乙個char,1個位元組,對其就是4個位元組。總共就是8個位元組啊。

19樓:紫翼魔狼

函式在結構體裡,或者說類裡,就是指標,你這個應該是32位的,那麼乙個指標就是4個位元組了,你只定義了乙個函式,那麼就是4個位元組。

而定義個乙個char,因為要位元組對齊,所以,是8個位元組。

你可以再定義乙個函式,其實定義函式只是增加了乙個函式指標,所以應該還是4個位元組。

你最好自己驗證一下。

20樓:匿名使用者

乙個空類只佔乙個位元組。

位元組對齊是指最後所得的位元組數必須是其中最大乙個變數的位元組的整數倍。

乙個類中每個虛函式都會佔用4個位元組。

類中的變數都會佔用位元組數的。

關於位元組對齊 用結構體舉個例子:

struct stu

; 8個位元組

struct stu

; 12個位元組。

類中除了虛函式和變數外,其他都不佔位元組。

使用sizeof計算類的大小

21樓:孫冰男

類的sizeof大小一般是類中的所有成員的sizeof大小之和,這個就不用多說。

不過有兩點需要注意:1)當類中含有虛成員函式的時候,例如:

class b

此時sizeof(b)的大小為8,而不是4。因為在類中隱藏了乙個指標,該指標指向虛函式表,正因為如此,

使得c++能夠支援多型,即在執行時繫結函式的位址。

2)另乙個要注意的是,當類中沒有任何成員變數,也沒有虛函式的時候,該類的大小是多少呢?

例如:class b2

此時sizeof(b2)的值是多少呢?在c++早期的編譯器中,這個值為0;然而當建立這樣的物件時,

它們與緊接著它們後面的物件有相同的位址。比如:

b2 b2;

int a;

那麼物件b2與變數a有相同的位址,這樣的話對物件b2位址的操作就會影響變數a。所以在現在大多數編譯器中,該值的大小為1。

如果有虛函式,則sizeof值為類的資料成員的大小加上vtbl(指標,4位元組),再加上其基類的資料成員的大小。如果是多重繼承,還得加上各基類的vtbl。

這個問題很麻煩.. 下面有更詳細的自己看下

22樓:匿名使用者

class 1 2 3 4 5 6 7 8 東南西北中發白 十三么

23樓:匿名使用者

多重繼承,太爛了,c++裡最爛的東西。

除了這個,以上的都還可以理解。

還有,sizeof如果不用在記憶體分配上,基本沒什麼用了。

比如malloc(n*sizeof(t))又因為c++已經可以用new x[y]這種語法,根本用不上sizeof了

24樓:volcanol的技術窩

眼花啊,類的特性很難啊

25樓:何處淬吳鉤

這個,樓主太厲害了看的我眼都花了

26樓:匿名使用者

能夠繼承多個父類?乙個兒子多個爸爸?有可能?c++真的有這條嗎?這與現實也不符合阿。

27樓:

有本書,深度探索c++物件模型,建議你看看,講的很好。yqgame.net

如何實現javascriptjs類命名空間的寫法

在c 中有namespace概念,java中有package的概念,有了這 些概念之後,在系統的執行時,每乙個方法就會擁有唯一的訪問路徑 namsepace.class.object,這樣就可以避免由於object重名所導致的問題.由於javascript是一種解釋型語言,在javascript中,...

水瓶空註冊商標屬於哪一類,運動水瓶空註冊商標屬於哪一類?

水瓶 空 屬於商標 分類第21類2101群組 經統計,註冊水瓶 空 的商標達57件。註冊時怎樣選擇其他小項類 1.選擇註冊 鹽瓶,群組號 2101 類別的商標有2件,註冊佔比率達3.51 2.選擇註冊 燭台,群組號 2106 類別的商標有2件,註冊佔比率達3.51 3.選擇註冊 胡椒瓶,群組號 21...

飲水瓶空的註冊商標屬於哪一類

飲水瓶 空的 屬於商標分類第21類2101群組 經路標網統計,註冊飲水瓶 空的 的商標達25件。註冊時怎樣選擇其他小項類 1.選擇註冊 瓶,群組號 2101 類別的商標有2件,註冊佔比率達8 2.選擇註冊 運動用飲水瓶,群組號 2105 類別的商標有2件,註冊佔比率達8 3.選擇註冊 手動清潔器具,...