色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 淺談字節對齊

淺談字節對齊 時間:2017-11-21      來源:未知

前言

對于字節對齊,是每個初學C語言者都比較容易暈的知識點,也是很多的公司在招聘的時候經常考到的知識點。但這個知識點對我們程序的優化以及理解計算機的運行原理又是至關重要的。所以今天,我們來這個知識點進行一下總結。

1. 為什么要字節對齊

簡單來講,就是為了提高數據讀取的效率。那為什么字節對齊會提高數據存取的效率呢?主要原因是下面兩個方面:

1) 外部總線,從內存中獲取數據,并不是按照數據存儲的小單位字節來的,而是4字節、8字節甚至更多,那這樣,假如當前計算機是按照4字節讀取數據的,那么,如果一個int類型的數據,在字節對齊的位置開始存放,則可以一次讀取到,否則需要花兩次才能取到這個數據。

2) 很多的cpu只從對齊的地址開始加載數據,而有的CPU這樣做,就是為了更快一些。

2. 字節對齊的原則

1). 變量對齊

變量地址 % min(變量字節數, 機器位數/8) = 0

例:int a;

上邊的例子等價于:變量地址%4=0 

也就是,計算機會為我們開辟一塊,長度為4字節,地址是4的整數倍的一塊地址空間。

2). 結構體成員變量對齊

結構體成員變量地址 % min(變量字節數, 機器位數/8) = 0;

    理解同1)。

3). 結構體變量對齊

結構體成員變量的大對齊方式相同

例:

struct test

{

char a;

int b;

    short c;

}test;

上邊的結構體中,大的對齊方式為4,則整個結構體的對齊方式為4,也就是結構體的內存地址是4的整數倍。

4). 結構體成員變量偏移對齊

結構體成員變量偏移 % min(變量字節數, 機器位數/8) = 0;

 

3. 詳細實例

struct test

{

char a;

int b;

    short c;

}test;

上邊的結構體變量定義好之后,我們還是詳細的來看一下,計算機為我們做了什么事情。

A:計算機首先,從一個是4的整數倍的地址開始準備開辟空間。(因為結構體的對齊方式與結構體中成員變量大的結構體方式相同。)比如這個地址值是0x7fff0100。

B: 成員變量a,char類型,根據對齊原則,這個成員變量的地址是1的整數倍即可。則是數組的地址即可。根據對齊,會一次開辟4字節的內存空間,a占用第一個字節。

C: 成員變量b,int類型,根據對齊原則,這個成員變量的地址是4的整數倍即可。則原來開辟的4字節,已經沒有位置滿足這個變量的對齊了,則會重新分配一個四字節的內存空間,將成員變量b放到這個四字節中,正好放下。

D: 后還有一個short類型的變量c,則系統又一次性的分配4字節,short c占用其中的兩個字節。

將其裝在內存中如下:

+---+---+---+---+---+---+---+---+---+---+---+---+

   | a |           |       b       |   c   |       |

+---+---+---+---+---+---+---+---+---+---+---+---+

那么這個結構體的長度,也就是sizeof(test)=12;

那么接下來,我們換一種定義方式看一下:

struct test

{

char a;

short c;

int b;

}test;

+---+---+---+---+---+---+---+---+

| a |   |    c  |       b       |  

+---+---+---+---+---+---+---+---+

根據對齊原則,就是上邊的這種存儲方式,可以看到,這種方式的定義,只需要分配8字節的內存空間就夠了。

那我們利用字節對齊,可以修改定義結構體的順序,是可以達到節省空間的效果的。

另外,還會有一些場景,我們會通過指針的偏移的方式訪問結構體內存的,這個時候,如果我們存在空洞,而寫指針偏移的程序的人沒有注意,是會非常容易出問題的,則這種場景,我們一般會人為的將結構體中的內存中的空洞,全部補齊。

比如,上邊兩種定義,我們分別來將其補齊。

struct test

{

char a;

char szResv[3];

int b;

short c;

short sResv;

}test;

struct test

{

char a;

char cResv;

short c;

int b;

}test;

上一篇:FS4412開發板使用Linux IIO驅動框架實現ADC驅動

下一篇:ARM處理器異常處理

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 亚洲精品国产黑色丝袜 | 国产av无码专区亚洲av紧身裤 | 岛国大片免费视频 | 欧洲一卡2卡3卡4卡国产 | 最新四色米奇影视777在线看 | 国产美足白丝榨精在线观看SM | 8090成人午夜精品无码 | 欧美拍拍视频免费大全 | 特级毛片A级毛片免费观看R | 2018高清一道国产 | 美女国产毛片A区内射 | 被仇人调教成禁脔hhh虐 | 亚洲欧美黑人猛交群 | 中文字幕 亚洲 欧美 | clubnaked艳裸舞视频 | 成人国内精品视频在线观看 | 久久久久影院美女国产主播 | 国产欧美亚洲精品第二区软件 | 国产wwwxxxx| 欧亚乱色熟一区二区三四区 | 在线观看黄色毛片 | 五月婷久久综合狠狠爱97 | 国产成人无码综合亚洲日韩 | 亚洲 校园 欧美 国产 另类 | 性爱视频网站 | 午夜亚洲国产理论片二级港台二级 | 欧美一区在线观看视频 | 亚洲欧美日韩精品专区 | 又大又粗又硬又爽又黄毛片 | 中文字幕一区二区三区门四区五区 | 欧美国产日韩A欧美在线视频 | 亚洲美女国产精品久久久久久久久 | 国产成人啪精品视频免费视频 | 黄毛片视频 | 男女夜色爽爽影院 | 中文字幕熟女人妻伦伦在线 | 巨爆乳寡妇中文在线观看 | 国产又爽又黄又不遮挡视频 | 乱人伦av| 亚洲AV永久无码天堂网一线 | 99热国产这里只有精品无卡顿 |