sizeof之字节对齐
生活随笔
收集整理的這篇文章主要介紹了
sizeof之字节对齐
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
想用結構體來存儲一些數據(Objective-c環境下),結構體如下:
typedef struct {char itemName;char imageNameSel;char imageNameDis;BOOL isSelOrDis; } StructTest1;那如果itemName是NSString類型的,結構體如下:
1 typedef struct { 2 __unsafe_unretained NSString * itemName; 3 __unsafe_unretained NSString * imageNameSel; 4 __unsafe_unretained NSString * imageNameDis; 5 BOOL isSelOrDis; 6 } StructTest2;之后,我想把幾個結構體對象放入一個NSArray里的時候,想知道他們分別占用的內存空間多大。
經過驗證,sizeof(StructTest1)等于4,sizeof(StructTest2)等于32,單獨理解起來都不是很難,char 類型占1位,BOOL占一位,NSString占8位。可sizeof(StructTest2)等于32,Why?沒錯,BOOL也占了8位,可在StructTest1結構體中只占了1位,這里就涉及到了一個概念,字節對齊。
百科里是這樣解釋的:
為什么需要字節對齊計算機組成原理教導我們這樣有助于加快計算機的取數速度,否則就得多花指令周期了。為此,編譯器默認會對結構體進行處理(實際上其它地方的數據變量也是如此),讓寬度為2的基本數據類型(short等)都位于能被2整除的地址上,讓寬度為4的基本數據類型(int等)都位于能被4整除的地址上,以此類推。這樣,兩個數中間就可能需要加入填充字節,所以整個結構體的sizeof值就增長了。
暫時理解了這么多,以后有新的認識了再補充。
以上。
轉載于:https://www.cnblogs.com/zpz501/p/5279222.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的sizeof之字节对齐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DIV+CSS 网页布局之:三列布局
- 下一篇: MAVEN学习笔记-maven的获取和安