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++&&Opencv實(shí)現(xiàn)控制臺字符動畫的方法
這篇文章主要介紹了C++&&Opencv實(shí)現(xiàn)控制臺字符動畫的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07C++智能指針shared_ptr與weak_ptr的實(shí)現(xiàn)分析
shared_ptr是一個標(biāo)準(zhǔn)的共享所有權(quán)的智能指針,允許多個指針指向同一個對象,定義在 memory 文件中,命名空間為 std,這篇文章主要介紹了C++ 中 shared_ptr weak_ptr,需要的朋友可以參考下2022-09-09C 語言實(shí)現(xiàn)一個簡單的 web 服務(wù)器的原理解析
這篇文章主要介紹了C 語言實(shí)現(xiàn)一個簡單的 web 服務(wù)器的原理解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲
這篇文章主要為大家詳細(xì)介紹了基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12