iOS底層知識(shí)之?dāng)?shù)據(jù)結(jié)構(gòu)union

union 共用體, 也叫聯(lián)合體,c/c++中另一種自定義的數(shù)據(jù)類(lèi)型;

  1. 聯(lián)合就是一個(gè)結(jié)構(gòu);
  2. 所有成員相對(duì)基地址的偏移量為0;
  3. 此結(jié)構(gòu)最大空間要足夠容納最寬的成員;
  4. 對(duì)齊方式要適合聯(lián)合中所有的成員;

聲明方式

union student {
    int a;
    short b;
    char c;
};

和之前介紹過(guò)的結(jié)構(gòu)體 有一樣的聲明語(yǔ)法。只是關(guān)鍵字不同而已。 也可以使用匿名union


union DATE {
    int a;
    short b;
    char c;
};
NSLog(@"%lu", sizeof(union DATE)); // 輸出4個(gè)字節(jié)

union DATE 聯(lián)合體最寬字段是 int a, 所以最大的內(nèi)存容量是4;


union DATE {
     char c[9];
      int i;
    double d;
};
NSLog(@"%lu", sizeof(union DATE)); // 輸出16個(gè)字節(jié)

這個(gè)片段代碼,輸出大小16, 因?yàn)椋?這個(gè)聯(lián)合體最大的字段是數(shù)組c9個(gè)字節(jié),所以最大分配9,并且與最寬的字段 double d的大小8 整除,因?yàn)?不能整除,所以提升到16;


union DATE {
     char c[5];
      int i;
};
NSLog(@"%lu", sizeof(union DATE)); // 輸出8個(gè)字節(jié)

這個(gè)案例如上, 最大分配5個(gè)字節(jié), 再看一下能否對(duì)齊另一個(gè)字段int i,所以得出大小為8;

參考鏈接 & 拓展

正數(shù)和負(fù)數(shù)在內(nèi)存存儲(chǔ)方式

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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