c c 下取消結構體位元組對齊方法

2021-09-10 06:23:42 字數 982 閱讀 2573

在c/c++下編譯器會預設地對結構體進行對齊,其對齊的方法跟平台具體的特性有關,本文主要介紹結構體不進行對齊的方法。

1、結構體位元組不進行對齊的用途

(1)、減小記憶體占用的空間

結構體預設進行對齊,占用的空間比結構體內部成員變數位元組加起來大,如果取消位元組對齊,可以減小一部分空間。見下面具體例子。

(2)、直接將結構體作為通訊協議(在低頻寬下通訊)

在不同的平台下,保證結構體內基本資料的長度相同,同時取消結構體的對齊,就可以將定義的資料格式結構體直接作為資料通訊協議使用。

2、結構體位元組不對齊的方法

利用偽指令#pragma pack (n)可以動態的調整記憶體對齊的方式:

#pragma pack (n)  

// 編譯器將按照n個位元組對齊;

#pragma pack()

// 恢復先前的pack設定,取消設定的位元組對齊方式

#pragma pack(pop)

// 恢復先前的pack設定,取消設定的位元組對齊方式

#pragma pack(1)

// 按1位元組進行對齊 即:不行進行對齊

3、使用示例:
#include

#pragma pack (1)

typedef

struct testnoalign

testnoalign;

#pragma pack ()

typedef

struct testalign

testalign;

intmain

(void

)return0;

}

編譯執行

root@root:/root# ./test

sizeof(testnoalign) is 13 sizeof(testalign) is 16

c c 下取消結構體位元組對齊方法

c c 下取消結構體位元組對齊方法 在c c 下編譯器會預設地對結構體進行對齊,其對齊的方法跟平台具體的特性有關,本文主要介紹結構體不進行對齊的方法。1 結構體位元組不進行對齊的用途 1 減小記憶體占用的空間 結構體預設進行對齊,占用的空間比結構體內部成員變數位元組加起來大,如果取消位元組對齊,可以...

C C 結構體位元組對齊

注 最近在做uvc描述符的編輯工具,用到很多的結構,為了方便把結構體寫成bin檔案,需要把結構體中填充的位元組去掉,在網上搜尋得到這篇文章,感覺挺好的,轉過來做個紀念。結構體 struct 的sizeof值,並不是簡單的將其中各元素所佔位元組相加,而是要考慮到儲存空間的位元組對齊問題。先看下面定義的...

C C 中結構體位元組對齊原理

首先看下面定義的結構體所佔空間記憶體的大小是多少呢?include using namespace std struct student 定義結構體 stu int main 可能會有人說,1 4 5,不就5嗎,然而,實際通過sizeof運算子得到的答案是 8 為什麼會這樣?通過記憶體空間分配來說明...