iOS中的字節(jié)對齊

字節(jié)對齊的原則:

  1. 數(shù)據(jù)成員對?規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員棍厂,第
    一個數(shù)據(jù)成員放在offset為0的地方,以后每個數(shù)據(jù)成員存儲的起始位置要
    從該成員大小或者成員的子成員大小(只要該成員有子成員,比如說是數(shù)組,
    結(jié)構(gòu)體等)的整數(shù)倍開始(比如int為4字節(jié),則要從4的整數(shù)倍地址開始存
    儲。
  2. 結(jié)構(gòu)體作為成員:如果一個結(jié)構(gòu)里有某些結(jié)構(gòu)體成員,則結(jié)構(gòu)體成員要從
    其內(nèi)部最大元素大小的整數(shù)倍地址開始存儲.(struct a里存有struct b,b
    里有char,int ,double等元素,那b應(yīng)該從8的整數(shù)倍開始存儲.)
  3. 收尾工作:結(jié)構(gòu)體的總大小,也就是sizeof的結(jié)果,.必須是其內(nèi)部最大
    成員的整數(shù)倍.不足的要補?寺惫。

Struct的字節(jié)對齊

struct的順序存放有一定的規(guī)則

    1. struct在內(nèi)存中是連續(xù)存放的,利用這點可以對struct進(jìn)行強(qiáng)制轉(zhuǎn)化(只要定義相同即可)蹦疑。
    1. struct定義的結(jié)構(gòu)體在內(nèi)存中是連續(xù)存放的西雀。所以,數(shù)組結(jié)構(gòu)可以與結(jié)構(gòu)體互相轉(zhuǎn)化歉摧。只需要強(qiáng)制轉(zhuǎn)化一下即可艇肴。但是要注意struct結(jié)構(gòu)體字節(jié)對其的問題,注意不同數(shù)據(jù)類型的定義先后叁温。

案例1:

struct LGStruct1 {
    char a;     // size:1 , offset:0 , 0 ~ 0        1   (8的倍數(shù)補齊再悼,8)
    double b;   // size:8 , offset:8 , 8 ~ 15       16
    int c;      // size:4 , offset:16 , 16 ~ 19     20
    short d;    // size:2 , offset:20 , 20 ~ 21     22  (8的倍數(shù)補齊,24)
} MyStruct1;

        char *a = (void *)&MyStruct1;
        double *b = (void *)&MyStruct1.b;
        int *c = (void *)&MyStruct1.c;
        short *d = (void *)&MyStruct1.d;

/*
查看內(nèi)存情況(iOS 小端存儲)
 (lldb) po sizeof(MyStruct1)   
 24
 (lldb) x &MyStruct1
 0x100002538: 61 00 00 00 00 00 00 00 00 00 00 00 00 00 f0 3f  a..............?
 0x100002548: 02 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00  ................
 (lldb) p &MyStuct1
 error: use of undeclared identifier 'MyStuct1'
 (lldb) p &MyStruct1
 (LGStruct1 *) $1 = 0x0000000100002538
 (lldb) p a
 (char *) $2 = 0x0000000100002538 "a"
 (lldb) p b
 (double *) $3 = 0x0000000100002540
 (lldb) p c
 (int *) $4 = 0x0000000100002548
 (lldb) p d
 (short *) $5 = 0x000000010000254c
 */

上面的案例很好理解 來個特殊極端的

案例2:

struct LGStruct2 {
    double b;   // size:8 , offset:0 , 0 ~ 7        8
    char a;     // size:1 , offset:8 , 8 ~ 8        9   (8的倍數(shù)補齊膝但,8)
    int c;      // size:4 , offset:12 , 12 ~ 15      20
    short d;    // size:2 , offset:16 , 16 ~ 17      22  (8的倍數(shù)補齊冲九,24)
} MyStruct2;

struct LGStruct3 {
    double b;   // size:8 , offset:0 , 0 ~ 7        8
    int c;      // size:4 , offset:11 , 8 ~ 11      12
    char a;     // size:1 , offset:12 , 12 ~ 12      13
    short d;    // size:2 , offset:14 , 14 ~ 15      16 
} MyStruct3;

(lldb) p sizeof(MyStruct2)
(unsigned long) $6 = 24
(lldb) p sizeof(MyStruct3)
(unsigned long) $0 = 16

MyStruct3 中的a和d的內(nèi)存分布有點奇怪。

總結(jié)一下:

1跟束、第一個參數(shù) 從offset 0位置開始
2莺奸、第二個參數(shù)開始,以當(dāng)前參數(shù)sizeof的倍數(shù)補齊
3冀宴、最后 以8的倍數(shù)補齊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末憾筏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子花鹅,更是在濱河造成了極大的恐慌,老刑警劉巖枫浙,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨肃,死亡現(xiàn)場離奇詭異古拴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)真友,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門黄痪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盔然,你說我怎么就攤上這事桅打。” “怎么了愈案?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵挺尾,是天一觀的道長。 經(jīng)常有香客問我站绪,道長遭铺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任恢准,我火速辦了婚禮魂挂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馁筐。我一直安慰自己涂召,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布敏沉。 她就那樣靜靜地躺著果正,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赦抖。 梳的紋絲不亂的頭發(fā)上舱卡,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音队萤,去河邊找鬼轮锥。 笑死,一個胖子當(dāng)著我的面吹牛要尔,可吹牛的內(nèi)容都是我干的舍杜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼赵辕,長吁一口氣:“原來是場噩夢啊……” “哼既绩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起还惠,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤饲握,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體救欧,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡衰粹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了笆怠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铝耻。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蹬刷,靈堂內(nèi)的尸體忽然破棺而出瓢捉,到底是詐尸還是另有隱情,我是刑警寧澤办成,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布泡态,位于F島的核電站,受9級特大地震影響诈火,放射性物質(zhì)發(fā)生泄漏兽赁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一冷守、第九天 我趴在偏房一處隱蔽的房頂上張望刀崖。 院中可真熱鬧,春花似錦拍摇、人聲如沸亮钦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜂莉。三九已至,卻和暖如春混卵,著一層夾襖步出監(jiān)牢的瞬間映穗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工幕随, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蚁滋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓赘淮,卻偏偏與公主長得像辕录,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子梢卸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

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