arm c中位元組對齊

2021-08-27 01:38:45 字數 812 閱讀 3906

__align關鍵字指示編譯器在n位元組邊界上對齊變數。

__align是乙個儲存類修飾符。它不影響函式的型別。

語法

__align(n)
其中:

n

是對齊邊界。

對於區域性變數,n值可為 1、2、4 或 8。

對於全域性變數,n可以具有最大為 2 的 0x80000000 次冪的任何值。

__align關鍵字緊靠變數名稱前面放置。

用法如果宣告的變數的常規對齊邊界小於n__align(n) 是非常有用的。八字節對齊方式可以顯著提高 vfp 指令的效能。

可以將__align與 extern 和 static 一起使用。 限制

由於__align是儲存類修飾符,因此不能將其用於:

只能進行過對齊。也就是說,可以將兩個位元組的物件按 4 個位元組對齊,而不能將 4 個位元組的物件按兩個位元組對齊。 示例

__align(8) char buffer[128]; // buffer starts on eight-byte boundary
void foo(void)

__align(16) int i; // permitted as a global variable.

參考:arm手冊

C 中位元組對齊以及位元組對齊的意義

對下面的類 class b 類b 物件的大小,如果直接計算是18 4 2 8 4 但是 sizeof b 結果是24。多出來的 6個位元組是怎麼回事呢?其實是記憶體對齊的原因。編譯器在預設的情況下,分配給各個成員變數的記憶體大小似乎是向佔最大空間的成員變數對齊的 這裡我不敢肯定,還沒看到權威的說法 ...

C struct 中位元組對齊問題

c struct 中位元組對齊問題 vc中下面幾個結構體大小分別是多少呢 struct mystruct struct mystruct pragma pack push 儲存對齊狀態 pragma pack 16 設定為16位元組對齊 struct test pragma pack pop 恢復對...

C中位元組對齊問題

好多筆試中,會考結構體的sizeof是多少,這就涉及到了位元組對齊問題。vc或gcc編譯器,預設按4位元組對齊 什麼叫位元組對齊?就是資料在記憶體中存放的方式,它存放的位址需要是它長度的整數倍。比如單位元組放在什麼位址都可以,雙位元組資料只能存放在偶位址上,4位元組數只能存放在是4的倍數的位址上。注...