特別的位元組對齊問題

2021-08-02 05:54:43 字數 547 閱讀 8358

struct x

;sizeof(x)的值為多少了?

關鍵點:陣列維度為0的成員不參與,但是它的型別參與。

注:在x86_64上「char*」的algin值為8,x86上為4。

那麼:#pragma pack(8)

struct x

;#pragma pack()

sizeof(x)值為8,因為alignof(char*)和pack(8)最小值為8,故按8位元組對齊。

#pragma pack(4)

struct x

;#pragma pack()

sizeof(x)值為8,因為alignof(char*)和pack(4)最小值為4,故按4位元組對齊。

#pragma pack(1)

struct x

;#pragma pack()

按1位元組對齊時,sizeof(x)值為8,因為alignof(char*)和pack(1)最小值為4,故按1位元組對齊。

如果結構體變成:

struct x

;sizeof(x)的值為多少了?

特別的位元組對齊問題

struct x sizeof x 的值為多少了?關鍵點 陣列維度為0的成員不參與,但是它的型別參與。注 在x86 64上 char 的algin值為8,x86上為4。那麼 pragma pack 8 struct x pragma pack sizeof x 值為8,因為alignof char ...

位元組對齊問題

現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各個硬體平台對儲存空間的...

位元組對齊問題

1 什麼是位元組對齊問題?一般來說,計算機按照其字長方式來定址可以提高執行效率,比如32位 4位元組 的x86 結構下,如果每次訪問的變數其位址都是4的倍數,則每次對變數的訪問只需要一次匯流排 操作。因此,編譯器為了迎合cpu的這一特性,一般在編譯的時候都會對變數的儲存方式 進行對齊處理。當然x86...