位元組對齊規則

2021-10-02 08:37:10 字數 753 閱讀 7498

四個重要的基本概念。

1.資料型別自身的對齊值:對於char型資料,其自身對齊值為1,對於short型為2,對於int,float,其自身對齊值為4,double為8單位位元組。

2.結構體或者類的自身對齊值:其成員中自身對齊值最大的那個值。

3.指定對齊值:#pragma pack (value)時的指定對齊值value。

4.資料成員、結構體和類的有效對齊值:自身對齊值和指定對齊值中小的那個值。

#pragma pack (1)

typedef struct aa

a;#pragma pack ()

void function()

//這裡位元組對齊長度為1,所以除錯結構的長度為5

#pragma pack (4)

typedef struct aa

a;#pragma pack ()

void function()

//這裡位元組對齊長度為4, char a 是乙個位元組,所以對齊位元組後長度為4,除錯結構的長度為8

struct s1

;struct s2

;//s2的長度會是多少呢?

void function()

;//得出的結果為24位元組.這裡位元組對齊長度為8,但是前面的相加寬度剛好是8的整數倍(char填充到4位元組),所以c 4位元組.a4位元組,b4位元組,d4位元組,e8位元組,一起就是24個位元組

位元組對齊的基本規則

位元組對齊的細節和編譯器實現相關,但一般而言,滿足三個準則 1 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除 2 結構體每個成員相對於結構體首位址的偏移量 offset 都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組 internal adding 3 結構體的總大小為結構...

位元組對齊的規則總結

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

位元組對齊的規則總結

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