如何讓struct不位元組對齊

2021-08-26 07:15:13 字數 557 閱讀 3162

下面我們使用預編譯指令#progma pack (value)來告訴編譯器,使用我們指定的對齊值來取代預設的。

#progma pack (2) /*指定按2位元組對齊*/

struct c

;#progma pack () /*取消指定對齊,恢復預設對齊*/

sizeof(struct c)值是8。

不位元組對齊的話 就設定#progma pack(1)

修改對齊值為1:

#progma pack (1) /*指定按1位元組對齊*/

struct d ;

#progma pack () /*取消指定對齊,恢復預設對齊*/

sizeof(struct d)值為7。

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

還可以設定編譯環境中的設定 :

(vs2005下,右擊專案-屬性-配置屬性-c/c++-**生成-結構成員對齊-選「1位元組(/zn1):」(即禁止記憶體對齊),預設是使用預設值,即按照結構中占用空間最大的成員進行對齊。

struct 位元組對齊

轉貼 1.資料型別自身的對齊值 就是上面交代的基本資料型別的自身對齊值。2.指定對齊值 progma pack value 時的指定對齊值value。3.結構體或者類的自身對齊值 其成員中自身對齊值最大的那個值。4.資料成員 結構體和類的有效對齊值 自身對齊值和指定對齊值中小的那個值。有了這些值,我...

struct與union位元組對齊問題

c 語言的一大優勢就是對記憶體空間的控制,當然,在物件導向語言的壓力下,程式設計師更喜歡輕鬆的語言,不喜歡自己還要顧慮記憶體空間。可是,c 語言仍然有很強的生命力,尤其是在作業系統 嵌入式系統這兩方面,因為要直接操作硬體,c語言就顯現出自己強大的體制 機制 邏輯優勢。c語言對記憶體控制,有乙個始終困...

c c 裡struct位元組對齊規則

pragma pack n 編譯器用 n 來設定資料的對齊方式。預設32位os對齊位元組是4,64位對齊位元組是8。n 有可能影響結構體內部成員的對齊位置,以及結構體整體大小。對齊規則 規則一.每個成員變數在其結構體內的偏移量都是 min 對齊位元組,成員變數型別的大小 的倍數。規則二 如果有巢狀結...