初探OC底層原理之《結(jié)構(gòu)體內(nèi)存分析》

一.先了解c和oc不同類型所對(duì)應(yīng)字節(jié)如下圖

image.png

二.了解內(nèi)存對(duì)齊規(guī)則

*1:數(shù)據(jù)成員對(duì)?規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員,第
?個(gè)數(shù)據(jù)成員放在offset為0的地?,以后每個(gè)數(shù)據(jù)成員存儲(chǔ)的起始位置要
從該成員??或者成員的?成員??(只要該成員有?成員,?如說是數(shù)組,
結(jié)構(gòu)體等)的整數(shù)倍開始(?如int為4字節(jié),則要從4的整數(shù)倍地址開始存
儲(chǔ)。

列如 int a 如果起始為 7 那么 7 舍棄 從8開始 后面數(shù)4位 就是 8,9,10,11

*2:結(jié)構(gòu)體作為成員:如果?個(gè)結(jié)構(gòu)?有某些結(jié)構(gòu)體成員,則結(jié)構(gòu)體成員要從
其內(nèi)部最?元素??的整數(shù)倍地址開始存儲(chǔ).(struct a?存有struct b,b
?有char,int ,double等元素,那b應(yīng)該從8的整數(shù)倍開始存儲(chǔ).)

*3:收尾?作:結(jié)構(gòu)體的總??,也就是sizeof的結(jié)果,.必須是其內(nèi)部最?
成員的整數(shù)倍.不?的要補(bǔ)?.

三根據(jù)代碼分析結(jié)構(gòu)體內(nèi)存的大小

struct LGStruct1 {
    double a;       // 8    [0 7]
    char b;         // 1    [8]
    int c;          // 4    (9 10 11 [12 13 14 15]
    short d;        // 2    [16 17] 24 //LGStruct1 最大成員是a,8的整數(shù)倍且不能小于17 所以是 24
}struct1;

struct LGStruct2 {
    double a;       // 8    [0 7]
    int b;          // 4    [8 9 10 11]
    char c;         // 1    [12]
    short d;        // 2    (13 [14 15] 16 //LGStruct2 最大成員是a 8的整數(shù)倍且不能小于15 所以是 16
}struct2;

// 家庭作業(yè) : 結(jié)構(gòu)體內(nèi)存對(duì)齊
struct LGStruct3 {
    double a; //8      [0 7]
    int b;    //4      [8 9 10 11]
    char c;   //1      [12]
    short d; // 2      13 [14 15]
    int e;   // 4      [16 17 18 19]
    struct LGStruct1 str;  //因?yàn)長(zhǎng)GStruct1結(jié)構(gòu)體的實(shí)際內(nèi)存大小是17按照內(nèi)存原則取結(jié)構(gòu)體里面最大的成員變量開始 20 21 22 23 [24 ...41]LGStruct3里面最大成因是 LGStruct1 他的內(nèi)存大小是24 取24的整數(shù)倍是 48 所有內(nèi)存大小是48
}struct3;
  • 輸出結(jié)果如下


    image.png

從上面結(jié)果驗(yàn)證可以得出結(jié)論

  • 1.結(jié)構(gòu)體內(nèi)存大小跟數(shù)據(jù)排列有關(guān)
  • 2.結(jié)構(gòu)體的內(nèi)存大小與成員的內(nèi)存大小有關(guān)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容