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

C語(yǔ)言程序中結(jié)構(gòu)體的內(nèi)存對(duì)齊詳解

 更新時(shí)間:2022年11月07日 08:48:15   作者:Fug_Lee  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言程序中結(jié)構(gòu)體的內(nèi)存對(duì)齊的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下

一、為什么存在內(nèi)存對(duì)齊

1.平臺(tái)原因(移植原因): 不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能在某些地址處取某些特定類型的數(shù)據(jù),否則拋出硬件異常。

2. 性能原因: 數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對(duì)齊。 原因在于,為了訪問(wèn)未對(duì)齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問(wèn);而對(duì)齊的內(nèi)存訪問(wèn)僅需要一次訪問(wèn)。

總的來(lái)說(shuō)結(jié)構(gòu)體的內(nèi)存對(duì)齊是拿空間來(lái)?yè)Q取時(shí)間的做法。

二、結(jié)構(gòu)體的內(nèi)存對(duì)齊四規(guī)則

默認(rèn)情況:默認(rèn)的對(duì)齊值 8字節(jié)

1.基本數(shù)據(jù)類型有一個(gè)對(duì)齊值

2.自定義類型有一個(gè)對(duì)齊值 = 內(nèi)部成員類型的最大值

3.程序的指定對(duì)齊值:#pragma pack(n) n == 2的冪次方 n可以等于2 4 8 16 …

4.程序的有效對(duì)齊值:程序的指定對(duì)齊值和數(shù)據(jù)類型對(duì)齊值得較小值

三、舉例

例1

typedef struct Test //8
{
	char a;     //1 + 7
	double b;   //8 
	int c;      //4 + 4
}Test;
void main()
{
	Test t;
	printf("Test size = %d", sizeof(Test));
}

分析:

char類型占一個(gè)字節(jié),double類型占八個(gè)字節(jié),int占四個(gè)字節(jié);根據(jù)其對(duì)齊規(guī)則,內(nèi)部成員類型的最大值為double(8個(gè)字節(jié)),所以char類型要補(bǔ)齊另外的七個(gè)字節(jié),加上int的四個(gè)字節(jié),一共是:1+7+8+4 = 20,此時(shí)20不是8的倍數(shù),因此int要補(bǔ)四個(gè)字節(jié)。

結(jié)果:

例2

typedef struct Test //8
{
	char a;     //1 + 3
	int c;      //4
	double b;   //8
}Test;
void main()
{
	Test t;
	printf("Test size = %d", sizeof(Test));

}

分析同上

結(jié)果:

例3

typedef struct Test
{
	short a; //2 + 6
	struct
	{
		int b;   //4 + 4
		double c;//8
		char d;  //1 + 7
	};
	int e;    //4 + 4
}Test;
void main()
{
	Test t;
	printf("Test size = %d", sizeof(Test));
}

結(jié)果:

例4 程序中有指定對(duì)齊值時(shí)

#pragma pack(2)
typedef struct Test
{
	short a; //2
	struct
	{
		int b;   //4
		double c;//8
		char d;  //1 + 1
	};//14
	int e;    //4
}Test;
void main()
{
	Test t;
	printf("Test size = %d", sizeof(Test));
}

結(jié)果:

以上就是C語(yǔ)言程序中結(jié)構(gòu)體的內(nèi)存對(duì)齊詳解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言結(jié)構(gòu)體內(nèi)存對(duì)齊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++輸入輸出操作符重載的深入分析

    C++輸入輸出操作符重載的深入分析

    本篇文章是對(duì)C++輸入輸出操作符重載進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 利用Matlab復(fù)刻掃雷小游戲

    利用Matlab復(fù)刻掃雷小游戲

    windows自帶的游戲《掃雷》是陪伴了無(wú)數(shù)人的經(jīng)典游戲,本程序參考《掃雷》的規(guī)則進(jìn)行了簡(jiǎn)化,用Matlab實(shí)現(xiàn),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-03-03
  • C語(yǔ)言詳細(xì)講解#error與#line如何使用

    C語(yǔ)言詳細(xì)講解#error與#line如何使用

    這篇文章主要介紹了C語(yǔ)言中#error與#line如何使用,#error與#line雖然在語(yǔ)言里面用的比較少,但是還是有必要了解一下
    2022-04-04
  • VS Code C/C++環(huán)境配置教程(無(wú)法打開(kāi)源文件“xxxxxx.h”或者檢測(cè)到 #include 錯(cuò)誤,請(qǐng)更新includePath)(POSIX API)

    VS Code C/C++環(huán)境配置教程(無(wú)法打開(kāi)源文件“xxxxxx.h”或者檢測(cè)到 #include 錯(cuò)誤,請(qǐng)更新in

    這篇文章主要介紹了VS Code C/C++環(huán)境配置教程(無(wú)法打開(kāi)源文件“xxxxxx.h” 或者 檢測(cè)到 #include 錯(cuò)誤。請(qǐng)更新includePath) (POSIX API),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • C++實(shí)現(xiàn)職工信息管理系統(tǒng)

    C++實(shí)現(xiàn)職工信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語(yǔ)言題目:有多少?gòu)堊雷?-并查集

    C語(yǔ)言題目:有多少?gòu)堊雷?-并查集

    并查集是一種用于管理分組的數(shù)據(jù)結(jié)構(gòu)。它具備兩個(gè)操作:(1)查詢?cè)豠和元素b是否為同一組 (2) 將元素a和b合并為同一組,需要的朋友可以參考下
    2021-09-09
  • C++特性之智能指針shared_ptr詳解

    C++特性之智能指針shared_ptr詳解

    shared_ptr是C++11提供的一種智能指針類,它足夠智能,可以在任何地方都不使用時(shí)自動(dòng)刪除相關(guān)指針,從而幫助徹底消除內(nèi)存泄漏和懸空指針的問(wèn)題。本文主要是來(lái)和大家聊聊shared_ptr的使用,需要的可以參考一下
    2022-12-12
  • Cocos2d-x Schedule定時(shí)器的使用實(shí)例

    Cocos2d-x Schedule定時(shí)器的使用實(shí)例

    這篇文章主要介紹了Cocos2d-x Schedule定時(shí)器的使用實(shí)例,本文的講解內(nèi)容包含在代碼注釋中,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言中的線程信號(hào)控制詳解

    C語(yǔ)言中的線程信號(hào)控制詳解

    這篇文章主要通過(guò)一些示例為大家詳細(xì)介紹一下C語(yǔ)言中的線程信號(hào)控制,文中的示例代碼講解詳細(xì),對(duì)我們深入了解C語(yǔ)言有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2023-02-02
  • C語(yǔ)言字符串函數(shù)介紹與模擬實(shí)現(xiàn)詳解

    C語(yǔ)言字符串函數(shù)介紹與模擬實(shí)現(xiàn)詳解

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)字符串操作函數(shù)的實(shí)例的相關(guān)資料,開(kāi)發(fā)程序的時(shí)候經(jīng)常使用到一些字符串函數(shù),例如求字符串長(zhǎng)度,拷貝字符串……,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

高邮市| 永宁县| 兴安县| 日喀则市| 新乡市| 西丰县| 满城县| 平果县| 乌鲁木齐县| 长春市| 洮南市| 辉南县| 新竹市| 汉沽区| 高雄市| 天门市| 兴业县| 永泰县| 赤峰市| 探索| 永寿县| 潼关县| 德阳市| 泰顺县| 胶州市| 岱山县| 临漳县| 赤壁市| 平湖市| 左贡县| 响水县| 上饶市| 莎车县| 芜湖县| 三原县| 阿拉善右旗| 施甸县| 固镇县| 兴业县| 塔城市| 鹤壁市|