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

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

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

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

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

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

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

32位編譯器:

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

64位編譯器:

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

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

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

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

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

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

延伸知識:C++空類大小

  • C++標準指出,不允許一個對象(當然包括類對象)的大小為0,不同的對象不能具有相同的地址。這是由于:

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    C語言遞歸:漢諾塔問題分析

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

    C++入門之vector使用詳解

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

    c++智能指針的超詳細講解

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

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

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

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

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

最新評論

乌什县| 科尔| 新蔡县| 晋城| 进贤县| 富裕县| 太湖县| 墨玉县| 雷山县| 安福县| 民乐县| 三门峡市| 志丹县| 婺源县| 黔南| 阳江市| 绍兴县| 靖宇县| 绵竹市| 水富县| 绥化市| 鲁山县| 铁力市| 梅河口市| 东安县| 清水河县| 娱乐| 新巴尔虎右旗| 岐山县| 建昌县| 西盟| 张家口市| 工布江达县| 乐安县| 丰顺县| 东乌珠穆沁旗| 湖州市| 镇平县| 会同县| 宕昌县| 庆元县|