C 中 類 佔 記憶體問題

2021-07-04 19:33:19 字數 1108 閱讀 7561

題目如下

若char是一位元組,int是4位元組,指標型別是4位元組,**如下:

class ctest

virtual

void mem_fun(){}

private:

char m_chdata;

int m_ndata;

static

char s_chdata;

};char ctest::s_chdata=』\0』;

問:

(1)若按4位元組對齊sizeof(ctest)的值是多少?

(2)若按1位元組對齊sizeof(ctest)的值是多少?

請選擇正確的答案。

a 16 4

b 16 10

c 12 9

d 10 10

c++ 類的記憶體布局

1)在類中,如果什麼都沒有,則類占用1個位元組,一旦類中有其他的占用空間成員,則這1個位元組就不在計算之內,如乙個類只有乙個int則占用4位元組而不是5位元組。

2)如果只有成員函式,則還是只占用1個位元組,因為類函式不占用空間

3)虛函式因為存在乙個虛函式表,需要4個位元組,資料成員物件如果為指標則為4位元組,注意有位元組對齊,如果為13位元組,則進製到16位元組空間。

4)sizeof的本質是得到某個型別的大小,確切的來說就是當建立這個型別的乙個物件(或變數)的時候,需要為它分配的空間的大小。而類也可以理解為類似於int、float這樣的一種型別,當類中出現static成員變數的時候,static成員變數是儲存在靜態區當中的,它是乙個共享的量,因此,在為這個類建立乙個例項物件的時候,是無需再為static成員變數分配空間的,所以,這個類的例項物件所需要分配的空間是要排除static成員變數的,於是,當sizeof計算類的大小的時候會忽略static成員變數的大小.

答案:

4位元組對齊,結果是12= 4(虛表指標)+1(char )+3(對齊補位)+4(int)

1位元組對齊,結果是9 =4(虛表指標)+1(char )+4(int)

C 中 引用也佔記憶體

int a 10 int r a cout a endl cout r endl 從上面的例子當中可以看出 它們得出的結果是相同的,這時便會有人說,r和a所占用的記憶體空間是相同的,因為列印出來的位址是相同的。所以這些教材上對於引用變數的操作,稱之為宣告乙個引用變數,而非定義。因為教材的編寫者認為引...

javascript 變數共佔記憶體問題

var a 5 var b a b 1 console.log b 得到6 console.log a 得到5在基本資料型別上 賦值的時候只是值得複製 var a 1,2,3,4 var b a b.push 4 console.log b 得到 1,2,3,4 console.log a 得到 1...

SQLServer佔記憶體過多的問題

經常看見有人問,mssql占用了太多的記憶體,而且還不斷的增長 或者說已經設定了使用記憶體,可是它沒有用到那麼多,這是怎麼一回事兒呢?首先,我們來看看mssql是怎樣使用記憶體的。最大的開銷一般是用於資料快取,如果記憶體足夠,它會把用過的資料和覺得你會用到的資料統統扔到記憶體中,直到記憶體不足的時候...