C 記憶體對齊

2021-09-25 18:55:47 字數 1028 閱讀 2474

此篇文章以以linux環境進行說明

資料型別占用的記憶體大小(位元組數)int:4       char:1         float:4      double:8     short:2

1、struct記憶體對齊

按結構體內長度最大的型別對齊(這裡只是用sizeof測試記憶體占用大小, 真正在記憶體申請空間的時候, 一整段記憶體一定是以4為最小單位對齊的)

struct t

; // sizeof(t) = 3

struct t

// sizeof(t) = 6

若多個變數沒有超過對齊邊界, 則不需要補空,否則需要補空, 將超過邊界的變數重新按對齊規則進行新的空間分配,示例如下:

struct t

; //sizeof(t) = 8

struct t

; //sizeof(t) = 1(a)+1(b)+1(c)+1(補位)+4 = 8

利用pragma pack設定對齊的值

struct t

; sizeof(t) = 24

#pragma pack(4)

struct t

; sizeof(t)=20

思考:根據變數定義順序, 先定義的先對齊, 遇到更長的再對齊, 還是一開始就按最長的對齊了

struct t

//a,b,對齊,c ???

//a,對齊,b,c ???

不解釋 了~~~

C 記憶體對齊

vc6.0編譯器對記憶體對齊的管理方式遵循以下兩個原則 1.對於結構體內部變數的對齊方式 變數存放的起始位址相對於結構的起始位址的偏移量 char 偏移量必須為sizeof char 即1的倍數 int 偏移量必須為sizeof int 即4的倍數 float 偏移量必須為sizeof float ...

c 記憶體對齊

一.計算struct的size有兩個原則 pragma pack n n是編譯器的對齊位元組數 1 struct中各成員按照對齊原則 在為當前變數 設為a 分配記憶體時,要參考之前所有變數的偏移量之和 設為d d必須是min n,sizeof a 的倍數,否則編譯器會自動在最後補上缺少的位元組數。2...

C 記憶體對齊

c 中的記憶體對齊 記憶體對齊 在我們的程式中,資料結構還有變數等等都需要占有記憶體,在很多系統中,它都要求記憶體分配的時候要對齊,這樣做的好處就是可以提高訪問記憶體的速度。我們還是先來看一段簡單的程式 程式一 1 include 2 using namespace std 3 4structx1 ...