最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++ class中成員與分配內(nèi)存的問題詳解

 更新時間:2021年10月08日 10:32:13   作者:gonghw403  
很多人都知道C++類是由結(jié)構(gòu)體發(fā)展得來的,所以他們的成員變量(C語言的結(jié)構(gòu)體只有成員變量)的內(nèi)存分配機制是一樣的,下面這篇文章主要給大家介紹了關(guān)于c++ class中成員與分配內(nèi)存問題的相關(guān)資料,需要的朋友可以參考下

1.內(nèi)存補齊

便于管理類(生成的對象)的內(nèi)存,類總內(nèi)存總是為最大成員字節(jié)大小的倍數(shù),不足的會進行內(nèi)存補齊

類的整體內(nèi)存就是由n塊最大成員字節(jié)大小的區(qū)域組成的

而內(nèi)存的分配對于成員變量來說是按照書寫順序來的(也就是構(gòu)造順序)如果不足最大成員大小,就自動填充

后一位變量如果無法排在前一位變量的那一塊內(nèi)存里面,就直接再開拓一塊最大成員字節(jié)大小的空間存放自己,前一位的剩余空間自動填充

class A{   //sizeof = 8
  int a;
  char b;
  short c;
};

class B{  //sizeof = 12
  char a;
  int b;
  short c;
};

上面類A,B,最大都是int 4字節(jié) :

A類,第一個是int ,4字節(jié)全部填滿; 第二個char,1字節(jié),還剩3字節(jié);第三個short,2字節(jié),補在第二個空間后,還剩一個字節(jié)自動補齊,一共2*4=8字節(jié)

B類,第一個是char,1字節(jié),還剩三個字節(jié);第二個int,4字節(jié),第一個剩的空間不夠,直接開拓下一個4字節(jié),剩下的三字節(jié)自動填滿;第三個short,2字節(jié),還剩2字節(jié)自動補齊,一共3*4=12

2.特殊情況--virtual函數(shù)

如果一個類里面有虛函數(shù),類會自動生成一個虛函數(shù)表指針,4字節(jié)的來管理虛函數(shù)

一個類無論有幾個虛函數(shù)都只有有一個四字節(jié)的指針

而且這個指針在其他成員之前生成,也就是和你寫虛函數(shù)的順序無關(guān)

比如:

class A{            //實際上sizeof = 2*4=8 ,而不是12
  char a;
  virtual void f() {}
  short b;
};

上面等價于

class A{  
  T *table //虛函數(shù)指針      
  char a;
  short b;
};

按照上面的方法可得sizeof = 8

同樣,由于虛函數(shù)指針是四個字節(jié),如果成員里面有更高字節(jié)的,同樣內(nèi)存補齊

class A{                //sizeof = 8*2 = 16
  virtual void f() {}    
  double a;
};

3.不需要考慮的內(nèi)存

每個對象所占用的存儲空間只是該對象的數(shù)據(jù)部分(虛函數(shù)指針和虛基類指針也屬于數(shù)據(jù)部分)所占用的存儲空間,而不包括函數(shù)代碼所占用的存儲空間

一些看似成員的要注意不算內(nèi)存

如:

一.靜態(tài)函數(shù)和變量 :

靜態(tài)函數(shù)和變量都不屬于類管理,統(tǒng)一在常量內(nèi)存區(qū)里面

二.非虛函數(shù)的成員函數(shù) :

不是每一個對象都會生成成員函數(shù),類的成員函數(shù)在其他內(nèi)存區(qū),對象用this指針調(diào)用的成員函數(shù),其地址固定

三.友元函數(shù)和非虛函數(shù)的成員函數(shù)性質(zhì)一樣

總結(jié)

到此這篇關(guān)于c++ class中成員與分配內(nèi)存問題的文章就介紹到這了,更多相關(guān)c++ class成員與分配內(nèi)存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++編寫String類代碼實例

    c++編寫String類代碼實例

    這篇文章主要介紹了c++編寫String類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • C++11中的可變參數(shù)模板/lambda表達式

    C++11中的可變參數(shù)模板/lambda表達式

    C++11的新特性可變參數(shù)模板能夠讓我們創(chuàng)建可以接受可變參數(shù)的函數(shù)模板和類模板,相比C++98和C++03,類模板和函數(shù)模板中只能含固定數(shù)量的模板參數(shù),可變參數(shù)模板無疑是一個巨大的改進,這篇文章主要介紹了C++11中的可變參數(shù)模板/lambda表達式,需要的朋友可以參考下
    2023-03-03
  • 淺談C語言的變量和常量

    淺談C語言的變量和常量

    這篇文章主要為大家詳細介紹了C語言的變量和常量,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 四個例子說明C語言?全局變量

    四個例子說明C語言?全局變量

    這篇文章主要介紹了四個例子說明C語言?全局變量,全局變量是C語言語法和語義中一個很重要的知識點,首先它的存在意義需要從三個不同角度去理解,下面來看看這三個不同的內(nèi)容分別是什么吧
    2022-04-04
  • Qt qml實現(xiàn)動態(tài)輪播圖效果

    Qt qml實現(xiàn)動態(tài)輪播圖效果

    這篇文章主要為大家詳細介紹了Qt和qml實現(xiàn)動態(tài)輪播圖效果的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-12-12
  • C語言全面細致精講關(guān)鍵字的使用

    C語言全面細致精講關(guān)鍵字的使用

    關(guān)鍵字是C語言非常重要的一部分,熟練的掌握和使用關(guān)鍵字有助于我們更加熟悉了解C語言,同時C語言的關(guān)鍵字也是面試筆試中??嫉膬?nèi)容。C語言的關(guān)鍵字共有32個,但并不是每個關(guān)鍵字都有坑,本篇文章將通過理論聯(lián)系實際的方式為大家講解C語言中易混易錯以及??嫉囊恍╆P(guān)鍵字
    2022-05-05
  • C++回文數(shù)及素數(shù)問題計算方法

    C++回文數(shù)及素數(shù)問題計算方法

    這篇文章主要介紹了C++回文數(shù)及素數(shù)問題計算方法,可實現(xiàn)一定范圍內(nèi)的素數(shù)與回文數(shù)運算功能,涉及C++字符串遍歷與數(shù)字數(shù)學運算的相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • C語言控制語句之 循環(huán)

    C語言控制語句之 循環(huán)

    C語言循環(huán)控制語句是一個基于C語言的編程語句,該語句主要有while循環(huán)語句、do-while循環(huán)語句和for循環(huán)語句來實現(xiàn)循環(huán)結(jié)構(gòu),今天通過本文給大家分享C控制語句的相關(guān)知識,需要的朋友參考下吧
    2021-07-07
  • C語言超詳細講解getchar函數(shù)的使用

    C語言超詳細講解getchar函數(shù)的使用

    C 庫函數(shù) int getchar(void) 從標準輸入 stdin 獲取一個字符(一個無符號字符)。這等同于 getc 帶有 stdin 作為參數(shù),下面讓我們詳細來看看
    2022-05-05
  • Ubuntu18.04上安裝Qt5.10的步驟實踐

    Ubuntu18.04上安裝Qt5.10的步驟實踐

    Qt是一個跨平臺的C++圖形用戶界面庫,本文就介紹了Ubuntu18.04上安裝Qt5.10的步驟實踐,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評論

丹阳市| 甘泉县| 揭东县| 泗水县| 石河子市| 塔城市| 泾川县| 祁东县| 五家渠市| 无锡市| 黄梅县| 阿拉善盟| 榆中县| 墨脱县| 涿鹿县| 青冈县| 莱州市| 喀喇| 武冈市| 巴彦淖尔市| 秦皇岛市| 镇远县| 西吉县| 韶山市| 江津市| 灌阳县| 梁河县| 鸡西市| 岐山县| 左云县| 河东区| 汉阴县| 南溪县| 湘潭市| 桦南县| 屏边| 岚皋县| 开江县| 无棣县| 锡林浩特市| 宾阳县|