溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

詳解C++中對(duì)象的大小

發(fā)布時(shí)間:2021-01-11 15:13:58 來(lái)源:億速云 閱讀:186 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家介紹詳解C++中對(duì)象的大小,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

看三個(gè)問(wèn)題:

  • C++中函數(shù)占不占對(duì)象的大小

  • 空類的大小是多少?

  • 如果類中有虛函數(shù),類的大小是多少?

一,C++中函數(shù)占不占對(duì)象的大小

看一段代碼:

詳解C++中對(duì)象的大小

可以看出,類的大小即為類的屬性a的大小為4,函數(shù)并不占對(duì)象的大小。

那么這個(gè)的原因是什么呢?

原因:

這樣定義的好處就是為了節(jié)省空間的大小。

假設(shè)此時(shí)類中有10個(gè)函數(shù),類又定義了100個(gè)對(duì)象。如果每個(gè)對(duì)象都包含一個(gè)函數(shù)的大小,那么就需要占用1000個(gè)函數(shù)空間的位置,這樣極大的消耗了資源。

實(shí)際上類的函數(shù)是放在代碼區(qū)的,哪個(gè)對(duì)象需要調(diào)用函數(shù),則從代碼區(qū)調(diào)用,因?yàn)楹瘮?shù)并不是對(duì)象獨(dú)有屬性,所以并不沖突,這樣僅僅占10個(gè)函數(shù)空間位置就夠了。

這樣一對(duì)比,函數(shù)放在代碼區(qū)節(jié)省了很多的資源,因此函數(shù)并不占用對(duì)象的大小。

至于對(duì)象放的位置,如果new的就在堆區(qū),不然就在棧區(qū)。

二,空類的大小是多少?

看代碼:

詳解C++中對(duì)象的大小

我們會(huì)發(fā)現(xiàn),空類的大小變成了1,正常不應(yīng)該是0嗎?

這樣設(shè)置的原因是因?yàn)槊恳粋€(gè)對(duì)象實(shí)例化都需要空間,這里系統(tǒng)默認(rèn)給了一個(gè)占位符,占1字節(jié)大小

三,如果類中有虛函數(shù),類的大小是多少?

看圖片:

詳解C++中對(duì)象的大小

對(duì)比上面兩種情況,空類大小為1,但是函數(shù)又不占用空間,為什么函數(shù)變?yōu)樘摵瘮?shù)卻變成了4呢?

因?yàn)楫?dāng)有虛函數(shù)時(shí),編譯器會(huì)給這個(gè)類加上虛函數(shù)指針 vptr(32位是4,64位是8)

此時(shí)類中有了指針,因此對(duì)象的大小就變?yōu)榱?。

上面就是類中不同情況的大小。

關(guān)于詳解C++中對(duì)象的大小就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI