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

詳解C++ 內(nèi)存對(duì)齊

 更新時(shí)間:2021年01月12日 09:07:49   作者:吳尼瑪  
這篇文章主要介紹了C++ 內(nèi)存對(duì)齊的相關(guān)資料,幫助大家更好的理解和使用c++編程語(yǔ)言,感興趣的朋友可以了解下

操作系統(tǒng)64位和32位有什么區(qū)別?

  • 64位操作系統(tǒng)意味著其cpu擁有更大的尋址能力。理論上來(lái)說(shuō),其性能相比于32位操作系統(tǒng)會(huì)提升1倍。但是這也需要在64位操作系統(tǒng)上運(yùn)行的軟件也是64位的。
  • 軟件中數(shù)據(jù)類型的的字節(jié)數(shù)大小其實(shí)和操作系統(tǒng)是多少位的沒(méi)有關(guān)系,而是由編譯器決定的。也就是說(shuō)數(shù)據(jù)結(jié)構(gòu)占多少位取決于在軟件編譯時(shí)我們選擇的是64位還是32位的編譯器。其具體占位數(shù)在編譯器已經(jīng)決定了。

數(shù)據(jù)類型對(duì)應(yīng)字節(jié)數(shù)

下面是不同位數(shù)編譯器下基本數(shù)據(jù)類型對(duì)應(yīng)的字節(jié)數(shù)。

32位編譯器:

char :1個(gè)字節(jié)
char*(即指針變量): 4個(gè)字節(jié)
short int : 2個(gè)字節(jié)
int: 4個(gè)字節(jié)
unsigned int : 4個(gè)字節(jié)
float: 4個(gè)字節(jié)
double:  8個(gè)字節(jié)
long:  4個(gè)字節(jié)
long long: 8個(gè)字節(jié)
unsigned long: 4個(gè)字節(jié)

64位編譯器:

char :1個(gè)字節(jié)
char*(即指針變量): 8個(gè)字節(jié)
short int : 2個(gè)字節(jié)
int: 4個(gè)字節(jié)
unsigned int : 4個(gè)字節(jié)
float: 4個(gè)字節(jié)
double:  8個(gè)字節(jié)
long:  8個(gè)字節(jié)
long long: 8個(gè)字節(jié)
unsigned long: 8個(gè)字節(jié)

總結(jié):32位和64位編譯器的基本數(shù)據(jù)類型字節(jié)數(shù)主要差別在64位的指針和long為8字節(jié)。

C++內(nèi)存對(duì)齊

  • 眾所周知,為了保證每個(gè)對(duì)象擁有彼此獨(dú)立的內(nèi)存地址,C++空類的內(nèi)存大小為1字節(jié)。而非空類的大小與類中非靜態(tài)成員變量和虛函數(shù)表的多少有關(guān)。其中,類中非靜態(tài)成員變量的大小則與編譯器的位數(shù)以及內(nèi)存對(duì)齊的設(shè)置有關(guān)。
  • 類中的成員變量在內(nèi)存中并不一定是連續(xù)的。它是按照編譯器的設(shè)置,按照內(nèi)存塊來(lái)存儲(chǔ)的,這個(gè)內(nèi)存塊大小的取值,就是內(nèi)存對(duì)齊。
  • 內(nèi)存對(duì)齊有2個(gè)規(guī)則:

1.第一個(gè)成員變量放在類中內(nèi)存offset為0的地方,之后的成員變量的對(duì)齊按照#pragma pack(n)指定的數(shù)值和這個(gè)成員變量類型所占字節(jié)數(shù)中,比較小的那個(gè)進(jìn)行(成員變量間補(bǔ)齊)。
2.在成員變量完成各自內(nèi)存對(duì)齊之后,類(結(jié)構(gòu)或聯(lián)合)本身也要進(jìn)行內(nèi)存對(duì)齊,對(duì)齊按照#pragma pack(n)指定的數(shù)值和類中最大成員變量類型所占字節(jié)數(shù)中,比較小的那個(gè)進(jìn)行(類中最后一個(gè)成員變量結(jié)尾后補(bǔ)齊),類大小需要是對(duì)齊值得整數(shù)倍。

  • \#pragma pack(n)作為一個(gè)預(yù)編譯指令用來(lái)設(shè)置內(nèi)存對(duì)齊的字節(jié)數(shù)。需要注意的是,n的缺省數(shù)值是編譯器設(shè)置的,一般為8,合法的數(shù)值分別是1、2、4、8、16。

延伸知識(shí):C++空類大小

  • C++標(biāo)準(zhǔn)指出,不允許一個(gè)對(duì)象(當(dāng)然包括類對(duì)象)的大小為0,不同的對(duì)象不能具有相同的地址。這是由于:

new需要分配不同的內(nèi)存地址,不能分配內(nèi)存大小為0的空間
避免除以sizeof(T)時(shí)得到除以0錯(cuò)誤故使用一個(gè)字節(jié)來(lái)區(qū)分空類。

  • 需要注意的是,這并不代表一個(gè)空基類也需要加一個(gè)字節(jié)到子類中去。這種情況下,空基類并不是獨(dú)立的,它附屬于子類。子類繼承空基類后,子類如果有自己的數(shù)據(jù)成員,則空基類的那一個(gè)字節(jié)并不會(huì)加到子類中去。

以上就是詳解C++ 內(nèi)存對(duì)齊的詳細(xì)內(nèi)容,更多關(guān)于C++ 內(nèi)存對(duì)齊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++?smart?pointer全面深入講解

    C++?smart?pointer全面深入講解

    一般在C/C++中,如果我們使用了pointer來(lái)指向某塊heap區(qū)域,當(dāng)不再需要這塊區(qū)域的時(shí)候,我們需要手動(dòng)刪除它。如果忘了的話,就會(huì)產(chǎn)生memory?leak
    2022-08-08
  • c++入門必學(xué)算法之快速冪思想及實(shí)現(xiàn)

    c++入門必學(xué)算法之快速冪思想及實(shí)現(xiàn)

    快速冪相較于普通的冪,具有占用空間少,效率更高等優(yōu)點(diǎn),全面碾壓普通的冪,下面這篇文章主要給大家介紹了關(guān)于c++入門必學(xué)算法之快速冪思想及實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 探究C++中string類的實(shí)現(xiàn)原理以及擴(kuò)展使用

    探究C++中string類的實(shí)現(xiàn)原理以及擴(kuò)展使用

    這篇文章主要介紹了C++中string類的實(shí)現(xiàn)原理以及擴(kuò)展使用,從內(nèi)存分配角度進(jìn)行了深入探究,需要的朋友可以參考下
    2015-12-12
  • 深入理解卡特蘭數(shù)及其應(yīng)用

    深入理解卡特蘭數(shù)及其應(yīng)用

    本篇文章是對(duì)卡特蘭數(shù)及其應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • MATLAB算法技巧和實(shí)現(xiàn)斐波那契數(shù)列的解決思路

    MATLAB算法技巧和實(shí)現(xiàn)斐波那契數(shù)列的解決思路

    這篇文章主要介紹了MATLAB算法技巧和實(shí)現(xiàn)斐波那契數(shù)列,這篇主要說(shuō)一下自己在算法設(shè)計(jì)課上用matlab做的兩道算法題,題目解起來(lái)都比較簡(jiǎn)單,但是需要些技巧,需要的朋友可以參考下
    2022-12-12
  • C語(yǔ)言遞歸:漢諾塔問(wèn)題分析

    C語(yǔ)言遞歸:漢諾塔問(wèn)題分析

    這篇文章主要介紹了C語(yǔ)言遞歸:漢諾塔問(wèn)題分析的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C++入門之vector使用詳解

    C++入門之vector使用詳解

    這篇文章主要為大家介紹了C++入門之vector使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • c++智能指針的超詳細(xì)講解

    c++智能指針的超詳細(xì)講解

    c++程序設(shè)計(jì)中經(jīng)常會(huì)用堆內(nèi)存,程序員要自己管理內(nèi)存的申請(qǐng)和釋放,使用原始指針,容易造成堆內(nèi)存泄漏(忘記釋放),二次釋放,使用智能指針能更好的管理堆內(nèi)存,下面這篇文章主要給大家介紹了關(guān)于c++智能指針的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++學(xué)生信息管理系統(tǒng)

    C++學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家想詳細(xì)介紹了C++學(xué)生信息管理系統(tǒng)的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 嵌入式C語(yǔ)言查表法在項(xiàng)目中的應(yīng)用

    嵌入式C語(yǔ)言查表法在項(xiàng)目中的應(yīng)用

    今天小編就為大家分享一篇關(guān)于嵌入式C語(yǔ)言查表法在項(xiàng)目中的應(yīng)用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12

最新評(píng)論

个旧市| 湘乡市| 社会| 连江县| 武强县| 外汇| 梓潼县| 浮梁县| 长治市| 封丘县| 千阳县| 乳源| 兰溪市| 汤原县| 泌阳县| 江门市| 黎平县| 江城| 甘肃省| 承德县| 泾川县| 安仁县| 深州市| 来宾市| 宜黄县| 茶陵县| 平潭县| 天镇县| 南丹县| 澎湖县| 咸阳市| 松江区| 赣州市| 尼勒克县| 浙江省| 泸溪县| 增城市| 屏山县| 永宁县| 梅河口市| 曲阜市|