內(nèi)存對齊,大端字節(jié) 序小端字節(jié)序驗證

本文為轉(zhuǎn)載球碉,原文地址:http://11142019.blog.51cto.com/11132019/1766032

空結(jié)構(gòu)體:對于空結(jié)構(gòu)體撞蜂,就是只有結(jié)構(gòu)體這個模子盲镶,但里面卻沒有元素的結(jié)構(gòu)體。
例:

typedef struct student
{
}std谅摄;

這種空結(jié)構(gòu)體的模子占一個字節(jié)徒河,sizeof(std)=1。

柔性數(shù)組:
結(jié)構(gòu)體中最后一個元素可以是一個大小未知的數(shù)組送漠,稱作柔性數(shù)組成員顽照,規(guī)定柔性數(shù)組前面至少有一個元素.

typedef struct student
{
int i;
char arr[];     //柔性數(shù)組成員
}std;
sizeof(std)=4;

sizeof求取該結(jié)構(gòu)體大小是不包含柔性數(shù)組的大小闽寡,柔性數(shù)組不管有沒有大小都不計入結(jié)構(gòu)體的大小代兵,可以通過動態(tài)內(nèi)存為它實現(xiàn)內(nèi)存分配。

內(nèi)存對齊:
對于字(自然邊界是偶數(shù)地址)爷狈,雙字(自然邊界是能被4整除的地址)植影,四字(自然邊界是能被8整除的地址)本身就是對齊的。為什么要對齊呢涎永?這是因為對于對齊的內(nèi)存只需要一次內(nèi)存訪問思币,對于未對齊的內(nèi)存,處理器要兩次內(nèi)存訪問羡微。

未對齊:一個字或者雙字跨越了4字節(jié)邊界谷饿,或者雙字跨越了8字節(jié)邊界,需要兩次內(nèi)存訪問妈倔。

對于結(jié)構(gòu)體博投,聯(lián)合體在計算其大小時要考慮其內(nèi)存對齊,以結(jié)構(gòu)中所占字節(jié)數(shù)最大的類型類型對齊。
例:

struct test
{
    char a1;
    short b2;
    char  c3;
    int d4;
};

因為其中int類型所占字節(jié)最多盯蝴,所以以4字節(jié)對齊毅哗,內(nèi)存分配方式如下,總共占12個字節(jié):

分析:因為以4字節(jié)對齊捧挺,首先char a1占一個字節(jié)存到00處虑绵,short b2 是字占兩個字節(jié) ,以偶數(shù)地址對齊闽烙,所以不能直接存到01 02 上翅睛,而應該存到02 03上,而空出來的01就會被浪費掉。同理宏所,當char c3存到04上后,對于int i摊溶,雙字必須要存到4的倍數(shù)的地址上爬骤,就只能存到08 09 0a 0b上,空出來的05 06 07會被浪費掉莫换。

struct test
{
    char a1;
    char  c3;
    short b2;  
    int d4;
};

同樣的霞玄,以4字節(jié)對齊,總共占8個字節(jié):
這是因為a1存到00拉岁,c3存到01坷剧,b2剛好存到02 03上,以偶數(shù)地址對齊喊暖,d4也剛好從04開始存儲惫企,以4字節(jié)對齊,沒有浪費內(nèi)存陵叽。

大端字節(jié)序:高字節(jié)存儲在低地址狞尔,低字節(jié)存儲在高字節(jié)處
小端字節(jié)序:低字節(jié)存儲在低地址,高字節(jié)存儲在高地址處
計算機的最小存儲單位是字節(jié)巩掺,一個字節(jié)占8bit位偏序。
以int為例:
例如:1的二進制碼是
00000000 00000000 00000000 00000001
寫成十六進制形式 :00 00 00 01這就代表了4個字節(jié),而內(nèi)存是從低地址到高地址的胖替,這樣就產(chǎn)生了兩種存儲方式研儒。

因為存儲方式方式的不同,讀取時也就產(chǎn)生了兩種方式独令。
一般讀取是從低地址向高地址讀取端朵,為了將存儲與讀取統(tǒng)一取來,所以采用小端存儲记焊,這樣的話逸月,低字節(jié)存到低地址,高字節(jié)存到高地址遍膜。
驗證方法:
1碗硬、可以聲明一個int a=1,再聲明一個char *p=&a;因為a占4個字節(jié)瓢颅,char 一次向后訪問一個字節(jié)恩尾,所以如果是小端的話在電腦上輸出p應該是1.
2、也可以用union,因為union是內(nèi)存公用挽懦,所以聲明一個int a翰意,char c;對a賦值為1,輸出c觀察結(jié)果。
有些問題如果不考慮大小端的話是根本想不明白的冀偶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末醒第,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子进鸠,更是在濱河造成了極大的恐慌稠曼,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件客年,死亡現(xiàn)場離奇詭異霞幅,居然都是意外死亡,警方通過查閱死者的電腦和手機量瓜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門司恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绍傲,你說我怎么就攤上這事扔傅。” “怎么了唧取?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵铅鲤,是天一觀的道長。 經(jīng)常有香客問我枫弟,道長邢享,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任淡诗,我火速辦了婚禮骇塘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘韩容。我一直安慰自己款违,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布群凶。 她就那樣靜靜地躺著插爹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪请梢。 梳的紋絲不亂的頭發(fā)上赠尾,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音毅弧,去河邊找鬼气嫁。 笑死,一個胖子當著我的面吹牛够坐,可吹牛的內(nèi)容都是我干的寸宵。 我是一名探鬼主播崖面,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梯影!你這毒婦竟也來了巫员?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤甲棍,失蹤者是張志新(化名)和其女友劉穎疏遏,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體救军,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年倘零,在試婚紗的時候發(fā)現(xiàn)自己被綠了唱遭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡呈驶,死狀恐怖拷泽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情袖瞻,我是刑警寧澤司致,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站聋迎,受9級特大地震影響脂矫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霉晕,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一庭再、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牺堰,春花似錦拄轻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至筏养,卻和暖如春斧抱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撼玄。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工夺姑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掌猛。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓盏浙,卻偏偏與公主長得像眉睹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子废膘,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 一竹海、框架 1、Mac系統(tǒng)及常用工具丐黄、進制;C數(shù)據(jù)類型斋配、常量變量、運算符灌闺、表達式艰争、格式化輸入輸出 2、關(guān)系運算符桂对、邏...
    師景福閱讀 695評論 0 2
  • 注:這是第三遍讀《C語言深度解剖》甩卓,想想好像自從大學開始就沒讀完過幾本書,其中譚浩強的那本《C語言程序設計(第四版...
    HavenXie閱讀 1,736評論 1 6
  • @[c++|struct] 今天在編程中碰到一個坑蕉斜,搞的調(diào)試了半天逾柿,最后發(fā)現(xiàn)程序中在寫數(shù)據(jù)和讀取數(shù)據(jù)時結(jié)構(gòu)體定義不...
    drybeans閱讀 3,607評論 1 11
  • 文/完美的補丁 文字的表現(xiàn)形式實在是太多了。 文字以書信的形式出現(xiàn)宅此,它就負責傳達思念机错、祝...
    完美的補丁閱讀 284評論 3 3
  • 我認為知識價值就是知識本身所產(chǎn)生的社會價值和擁有知識的人的社會價值與自我價值的體現(xiàn)。 自從大學改制以來父腕,上大學更容...
    月光明媚閱讀 250評論 0 0