轉(zhuǎn)
這是給編譯器用的參數(shù)設(shè)置旗吁,有關(guān)結(jié)構(gòu)體字節(jié)對齊方式設(shè)置磷籍, #pragma pack
是指定數(shù)據(jù)在內(nèi)存中的對齊方式。
#pragma pack(n)
作用:C編譯器將按照n個字節(jié)對齊鹰晨。
#pragma pack()
作用:取消自定義字節(jié)對齊方式抛虏。
#pragma pack(push, 1)
作用:是指把原來對齊方式設(shè)置壓棧,并設(shè)新的對齊方式設(shè)置為一個字節(jié)對齊
#pragma pack(pop)
作用:恢復(fù)對齊狀態(tài)
因此可見殃恒,加入push和pop可以使對齊恢復(fù)到原來狀態(tài)植旧,而不是編譯器默認(rèn),可以說后者更優(yōu)离唐,但是很多時候兩者差別不大
例:
#include <iostream>
#include <string>
using namespace std;
#pragma pack(push, 1)
struct A {
char a;
int b;
};
#pragma pack(pop)
struct B {
char a;
int b;
};
int main() {
cout << sizeof(A) << sizeof(B);
//58
return 0;
}
若
A
不用#pragma pack(push, 1)
和#pragma pack(pop)
括起來病附,則輸出88