1. 程式人生 > >結構體內存對齊的原則及原理

結構體內存對齊的原則及原理

alt mil stm32 info ali size 電路 今天 結構

結構體是C語言的一大特色,今天就來思考兩個問題。

  1. 它的成員的順序排列有什麽要求嗎?

原則一:結構的首變量地址偏移量offset0,之後每個變量的首地址都要是其本身寬度的整數倍。總size=(0+1)+(3+4)+(0+8)=16

技術分享圖片

原則二:結構體的大小一定是最大成員寬度的整數倍,依照原則1,總size=8+4+1=13;因為原則二,所以要在char後補齊3位,總size=16

技術分享圖片

  2.為什麽要設計內存對齊這種方式?

cpu需要取4個連續的字節時,若內存起始位置的地址可以被4整除,那麽我們稱其對齊訪問,首先很多CPU並不支持非對齊的內存訪問,比如我們使用的stm32(有些x86

結構的復雜指令集CPU,可以非對齊內存訪問,他采取多次讀取對齊的內存,然後拼接數據來實現;但這樣會增加數據訪問的時間,和電路設計的復雜性);硬件電路為何會更復雜這個問題,先不深入討論。所以內存對齊明白會提高CPU的訪問速度就 OK了。

結構體內存對齊的原則及原理