原文出自:http://blog.csdn.net/goodluckyxl/archive/2005/10/17/506827.aspx
from dui0067d_ads1_2_complib
3.13 type qulifiers
有部分摘自arm編譯器文件對齊部分
對齊的使用:
1.__align(num)
這個用於修改最高端別物件的位元組邊界。在彙編中使用ldrd或者strd時
就要用到此命令__align(8)進行修飾限制。來保證資料物件是相應對齊。
這個修飾物件的命令最大是8個位元組限制,可以讓2位元組的物件進行4位元組
對齊,但是不能讓4位元組的物件2位元組對齊。
__align是儲存類修改,他只修飾最高端型別物件不能用於結構或者函式物件。
2.__packed
__packed是進行一位元組對齊
1.不能對packed的物件進行對齊
2.所有物件的讀寫訪問都進行非對齊訪問
3.float及包含float的結構聯合及未用__packed的物件將不能位元組對齊
4.__packed對區域性整形變數無影響
5.強制由unpacked物件向packed物件轉化是未定義,整形指標可以合法定
義為packed。
__packed int* p; //__packed int 則沒有意義
6.對齊或非對齊讀寫訪問帶來問題
__packed struct struct_test
; //定義如下結構此時b的起始位址一定是不對齊的
//在棧中訪問b可能有問題,因為棧上資料肯定是對齊訪問[from cl]
//將下面變數定義成全域性靜態不在棧上
static char* p;
static struct struct_test a;
void main()
ARM下的對齊處理
from dui0067d ads1 2 complib 3.13 type qulifiers 有部分摘自arm編譯器文件對齊部分 對齊的使用 1.align num 這個用於修改最高端別物件的位元組邊界。在彙編中使用ldrd或者strd時 就要用到此命令 align 8 進行修飾限制。來保證資料...
arm處理器下的對齊異常1 簡介
什麼是對齊異常呢,為什麼arm處理器下會有對齊異常?這個要先從arm 32位處理器下的兩條指令ldr與str說起。作為a32指令集的兩條最基本指令,str ldr 可以用於暫存器與記憶體之間的資料交換,ldr是將記憶體中的數載入到暫存器,str是將暫存器中的數載入記憶體。a32下ldr與str一次操...
ARM 記憶體對齊總結
一 啥是記憶體對齊?為啥要記憶體對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問都可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特定的記憶體位址訪問,這就是對齊。位元組對齊的原因大致是如下兩條 1 平台原因 移植原因 不是所有的硬體平台都能訪問...