C++中的類的大小詳解
一、普通類的大小
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(){
int i = 0;
float f = 0.01f;
};
int getI(){
return i;
}
int getF(){
return f;
}
private:
int i;
float f;
//靜態(tài)變量實(shí)際上是其全局變量,它存儲在全局/靜態(tài)存儲區(qū),不占對象空間
static int staNum;
};
int MyClass::staNum = 2;
int main()
{
MyClass myclass;
cout << "myclass的大小" << sizeof(myclass) << endl;
return 0;
}

我們可以看到,在創(chuàng)建類的對象中,真正占據(jù)??臻g的只有兩個成員變量,分別為4個字節(jié)。靜態(tài)成員變量實(shí)際上與全局變量一起存儲在全局存儲區(qū),而成員函數(shù)則與其他函數(shù)一樣存在于代碼區(qū)。
二、空類的大小
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(){};
private:
};
int main()
{
MyClass myclass;
cout << "myclass的大小" << sizeof(myclass) << endl;
return 0;
}

在使用類的指針的時候,如果類的的大小為0,那么排在一起的幾個空類地址都是一樣的話,我們又怎么知道是哪個呢?
三、自動填充類或者結(jié)構(gòu)體的大小
#include<iostream>
using namespace std;
struct MyStruct1
{
bool b1;
bool b2;
int i1;
};
struct MyStruct2
{
bool b1;
int i1;
bool b2;
};
struct MyStruct3
{
bool b1;
short s1;
};
int main()
{
MyStruct1 s1;
MyStruct2 s2;
MyStruct3 s3;
cout << "MyStruct1的大小" << sizeof(s1) << endl;
cout << "MyStruct2的大小" << sizeof(s2) << endl;
cout << "MyStruct3的大小" << sizeof(s3) << endl;
return 0;
}

當(dāng)我們按照不同的的順序排列變量的時候會發(fā)現(xiàn),類的大小是不盡相同的。第一種情況,MyStruct中的兩個布爾連在一起,如果后面沒有變量,編譯器會自動填充2個字節(jié);而現(xiàn)在后面還有一個整形i,整形跨越了兩個4字節(jié),在讀取整形的時候需要兩個4字節(jié),因此編譯器會在這種情況下也會在i1填充2個字節(jié),從而是i1在下一個字節(jié)開始。對于第二種情況,MyStruct2中由于兩個布爾類型被整形隔開,我們需要兩次填充。第三種情況,MyStruct3中由于short只有兩個字節(jié),因此只需要填充一個字節(jié)。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲完整代碼
大家好,本篇文章主要講的是C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲完整代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01
C++類靜態(tài)成員與類靜態(tài)成員函數(shù)詳解
靜態(tài)成員不可在類體內(nèi)進(jìn)行賦值,因?yàn)樗潜凰性擃惖膶ο笏蚕淼?。你在一個對象里給它賦值,其他對象里的該成員也會發(fā)生變化。為了避免混亂,所以不可在類體內(nèi)進(jìn)行賦值2013-09-09
C語言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解
大家好,本篇文章主要講的是C語言字符串函數(shù)操作(strlen,strcpy,strcat,strcmp)詳解,感興趣的同學(xué)趕快來看一看吧2021-12-12
C++ std::make_unique和std::make_shared用法小結(jié)
本文主要介紹了C++ std::make_unique和std::make_shared用法,使用std::make_unique和std::make_shared能夠簡化動態(tài)分配內(nèi)存和構(gòu)造對象的過程,提高代碼的安全性和可讀性,感興趣的可以了解一下2023-11-11

