__ATTRIBUTE__ 你知多少?
生活随笔
收集整理的這篇文章主要介紹了
__ATTRIBUTE__ 你知多少?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
_ATTRIBUTE__ 你知多少?
?
1 #include "stdio.h" 2 3 /* 地址參考基準(zhǔn) */ 4 5 char r1; 6 short r2;int refer; 7 8 struct p 9 { 10 int a; 11 12 char b; 13 14 short c; 15 16 }__attribute__((aligned(4))) pp; 17 /* 4字節(jié)對齊,a本身占4字節(jié) 此處占4字節(jié),b本身占1字節(jié) 此處占2字節(jié)(補齊4字節(jié)),c本身占2字節(jié) 此處占2字節(jié)(補齊4字節(jié))*/ 18 19 struct m 20 { 21 char a; 22 23 int b; 24 25 short c; 26 27 }__attribute__((aligned(4))) mm; 28 /* 4字節(jié)對齊,a本身占1字節(jié) 此處占4字節(jié)(補齊4字節(jié)),b本身占4字節(jié) 此處占4字節(jié),c本身占2字節(jié) 此處占4字節(jié)(補齊4字節(jié)) */ 29 30 struct o 31 { 32 int a; 33 34 char b; 35 36 short c; 37 38 char d; 39 40 }oo; 41 /* 默認(rèn)字節(jié)對齊同4字節(jié)對齊,a本身占4字節(jié) 此處占4字節(jié),b本身占1字節(jié) 此處占2字節(jié),c本身占2字節(jié) 此處占2字節(jié)、 42 (b和c一起補齊占4字節(jié),因為b是從4的整數(shù)倍地址開始放的),d本身占1字節(jié) 此處占4字節(jié)(默認(rèn)字節(jié)對齊) */ 43 44 struct x 45 46 { 47 int a; 48 49 char b; 50 51 struct p px; 52 53 short c; 54 55 }__attribute__((aligned(8))) xx; 56 /* 8字節(jié)對齊,a本身占4字節(jié) 此處占4字節(jié),b本身占1字節(jié) 此處占4字節(jié)(同a一起補齊8字節(jié)因為px是8字節(jié)的要從8的整數(shù)倍地址放), 57 px本身占8字節(jié) 此處占8字節(jié),c本身占2字節(jié) 此處占8字節(jié)(由于8字節(jié)對齊且c是從8的整數(shù)倍地址開始放的,所以c要補齊到8字節(jié)) */ 58 59 int main() 60 61 { 62 /* 數(shù)據(jù)類型所占內(nèi)存大小 */ 63 printf("sizeof(int)=%d, sizeof(short)=%d, sizeof(char)=%d \n", sizeof(int), sizeof(short), sizeof(char)); 64 /* 單個變量的地址分配 */ 65 printf("sizeof(refer)=%d, &refer=0x%08X, &r1=0x%08X,&r2=0x%08X \n", sizeof(refer), &refer, &r1, &r2); 66 /* 4字節(jié)對齊的結(jié)構(gòu)體地址分配 */ 67 printf("pp=%d, &pp=0x%08X, &pp.a=0x%08X, &pp.b=0x%08X, &pp.c=0x%08X \n", sizeof(pp), &pp, &pp.a, &pp.b, &pp.c); 68 /* 4字節(jié)對齊的結(jié)構(gòu)體地址分配 */ 69 printf("mm=%d, &mm=0x%08X, &mm.a=0x%08X, &mm.b=0x%08X, &mm.c=0x%08X \n", sizeof(mm), &mm, &mm.a, &mm.b, &mm.c); 70 /* 默認(rèn)字節(jié)對齊的結(jié)構(gòu)體地址分配 */ 71 printf("oo=%d, &oo=0x%08X, &oo.a=0x%08X, &oo.b=0x%08X, &oo.c=0x%08X, &oo.d=0x%08X \n", sizeof(oo), &oo, &oo.a, &oo.b, &oo.c, &oo.d); 72 /* 8字節(jié)對齊的結(jié)構(gòu)體地址分配 */ 73 printf("xx=%d, &xx=0x%08X, &xx.a=0x%08X, &xx.b=0x%08X, &xx.px=0x%08X, &xx.c=0x%08X \n", sizeof(xx), &xx, &xx.a, &xx.b, &xx.px, &xx.c); 74 75 return 0; 76 77 }輸出結(jié)果
?
轉(zhuǎn)載于:https://www.cnblogs.com/skullboyer/p/7762097.html
總結(jié)
以上是生活随笔為你收集整理的__ATTRIBUTE__ 你知多少?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WIN11映射NAS网络驱动器提示 用户
- 下一篇: PGIS踩过的坑