字的邊界對齊問題

2021-09-29 07:04:29 字數 670 閱讀 8393

arm微處理器中支援位元組、半字、字三種資料型別,其中,字需要4位元組對齊(位址的低兩位為0)、半字需要2位元組對齊(位址的最低位為0)

1、字對齊資料,也就是說每個資料都是用字(32位)來表示的,而arm中的儲存單元都是以位元組為單位,那麼要索引乙個資料,需要連續的4個位元組才行,比如,0x0000_0000~0x0000_0003這四個單元儲存乙個資料,緊接著0x0000_0004~0x0000_0007這四個單元儲存第二個資料,那麼依此類推,每個資料的儲存起始位址為:

0x0000_0000

0x0000_0004

0x0000_0008

0x0000_000c

0x0000_0010

0x0000_0014

......

可見,這些資料的位址最後乙個十六進製制位按照0、4、8、c迴圈,而對應的二進位制為0000、0100、1000、1100。看出來了吧,這些數由於是0x4(0100b)的整數倍,最後兩位都是"00"。

2、同理,半字就是兩個位元組,那麼位址是:

0x0000_0000

0x0000_0002

0x0000_0004

......

由於都是0x2(10b)的整數倍,所以位址的最後乙個二進位制位都為"0"。

3、位元組型別資料就是每個位元組位址都用上了。

邊界對齊問題

結構體邊界對齊 許多實際的計算機系統對基本型別資料在記憶體中存放的位置有限制,它們會要求這些資料的首位址的值是某個數k 通常它為4或8 的倍數,這就是所謂的記憶體對齊,而這個k則被稱為該資料型別的對齊模數 alignment modulus 當一種型別s的對齊模數與另一種型別t的對齊模數的比值是大於...

C語言結構中的邊界對齊問題

沒錯,今天2月14,單身狗如我情人節也只能苦逼地擼 了。不知道大家有沒有發現乙個奇怪的現象,見圖 結構test裡面包含了1個int型變數和2個char型變數,照理說sizeof struct test 應該等於它們三個相加的結果6才對,為什麼會等於8呢?事實上,結構成員在記憶體中的儲存並不是想當然地...

整數邊界對齊方式 c中結構體邊界對齊

原則1 普通資料成員對齊規則 第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始 比如int在32位機為 位元組,則要從4的整數倍位址開始儲存 原則2 結構體成員對齊規則 如果乙個結構裡有某些結構體成員,則該結構體成員要從其內部最大元素大小的整數倍位址...