結構體內存對齊

2021-10-05 03:45:19 字數 777 閱讀 2222

1、首先得掌握結構體的對齊規則:

2、為什麼存在記憶體對齊?

效能原因: 資料結構(尤其是棧)應該盡可能地在自然邊界上對齊。 原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問;而對齊的記憶體訪問僅需要一次訪問。

總體來說:

結構體的記憶體對齊是拿空間來換取時間的做法。那在設計結構體的時候,我們既要滿足對齊,又要節省空間,如何做到:讓占用空間小的成員盡量集中在一起。

//例如:

struct s1

;struct s2

;

s1和s2型別的成員一模一樣,但是s1和s2所佔空間的大小有了一些區別。

3、修改預設對齊數

之前我們見過了#pragma 這個預處理指令,這裡我們再次使用,可以改變我們的預設對齊數。

#include

#pragma pack(8)

//設定預設對齊數為8

struct s1

;#pragma pack()

//取消設定的預設對齊數,還原為預設

#pragma pack(1)

//設定預設對齊數為8

struct s2

;#pragma pack()

//取消設定的預設對齊數,還原為預設

intmain()

結論:

結構在對齊方式不合適的時候,我麼可以自己更改預設對齊數。

結構體內存對齊

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

結構體內存對齊

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

結構體內存對齊

對齊規則 每個特定平台上的編譯器都有自己的預設 對齊係數 也叫對齊模數 程式設計師可以通過預編譯命令 pragma pack n n 1,2,4,8,16來改變這一係數,其中的n就是你要指定的 對齊係數 規則 1 資料成員對齊規則 結構 struct 的資料成員,第乙個資料成員放在offset為0的...