C 語法 1 struct 記憶體的對齊原則

2021-07-15 04:26:33 字數 903 閱讀 7586

struct/class以及union記憶體對齊四個原則:

1、資料成員對齊規則:結構(struct)(或聯合(union))的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小或者成員的子成員大小(只要該成員有子成員,比如說是陣列,結構體等)的整數倍開始(比如int在32位機為4位元組, 則要從4的整數倍位址開始儲存),基本型別不包括struct/class/uinon。

2、結構體作為成員:如果乙個結構裡有某些結構體成員,則結構體成員要從其內部"最寬基本型別成員"的整數倍位址開始儲存.(struct a裡存有struct b,b裡有char,int ,double等元素,那b應該從8的整數倍開始儲存.)。

3、收尾工作:結構體的總大小,也就是sizeof的結果,.必須是其內部最大成員的"最寬基本型別成員"的整數倍.不足的要補齊.(基本型別不包括struct/class/uinon)。

4、sizeof(union),以結構裡面size最大元素為union的size,因為在某一時刻,union只有乙個成員真正儲存於該位址。

測試用例:

[cpp]view plain

copy

print?

#include 

using

namespace

std;  

union

a  ;  

struct

b  ;  

class

c  ;  

struct

usc  

;  void

main()  

總結:從「struct/class以及union記憶體對齊原則」可以得出:在struct/class/union中定義變數時,長度小的變數先定義,長度大的變數後定義,可以節省記憶體。

struct的記憶體對齊

結構體位元組對齊能減少記憶體占用,提高記憶體訪問效率。不論在x86或arm處理器上c的每種型別儲存都會要求記憶體對齊,除char以外。結構體中不能包含結構體本身,但可以包含指標。由於平台原因對齊大小不同,可能同乙個結構體得到的大小會不同,但一般的對齊規則如下 chars可以從任何位元組位址開始,2位...

C語言結構struct的記憶體對齊

作業系統的記憶體對齊問題對於低層程式設計來說非常重要,對理解記憶體對齊原理及方法則有助於幫助程式設計師判斷訪問非法記憶體。struct記憶體預設的記憶體對齊原則主要有兩個,乙個是結構成員之間的記憶體對齊,另乙個是結構體整體的記憶體對齊。c編譯器預設的結構成員變數記憶體對齊為 n位元組對齊 n即該成員...

C語言中的struct 記憶體對齊

sizeof計算結構體大小的時候具體是怎樣計算的 記憶體對齊的原則是根據最寬資料型別的大小進行對齊的 struct a 大小是8個位元組要進行記憶體對齊,是根據int 4個位元組對齊的 char short 4位元組 int 4位元組 如上是這樣對齊的 struct a 大小是8個位元組 int 4...