#pragma pack(push,1)與#pragma pack(1)的區(qū)別

這是給編譯器用的參數(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) 作用:恢復對齊狀態(tài)

因此可見凌净,加入push和pop可以使對齊恢復到原來狀態(tài),而不是編譯器默認屋讶,可以說后者更優(yōu)冰寻,但是很多時候兩者差別不大

如:

#pragma pack(push) //保存對齊狀態(tài)

#pragma pack(4)//設(shè)定為4字節(jié)對齊

相當于 #pragma pack (push,4)

#pragma pack (1) 作用:調(diào)整結(jié)構(gòu)體的邊界對齊,讓其以一個字節(jié)對齊皿渗;<使結(jié)構(gòu)體按1字節(jié)方式對齊>

#pragma pack ()

例如:

#pragma pack(1)

struct sample
{
char a;
double b;
};

#pragma pack()

注:若不用#pragma pack(1)和#pragma pack()括起來斩芭,則sample按編譯器默認方式對齊(成員中size最大的那個)。即按8字節(jié)(double)對齊乐疆,則sizeof(sample)==16.成員char a占了8個字節(jié)(其中7個是空字節(jié))划乖;若用#pragma pack(1),則sample按1字節(jié)方式對齊sizeof(sample)==9.(無空字節(jié))挤土,比較節(jié)省空間啦琴庵,有些場和還可使結(jié)構(gòu)體更易于控制。

應用實例

在網(wǎng)絡協(xié)議編程中仰美,經(jīng)常會處理不同協(xié)議的數(shù)據(jù)報文迷殿。一種方法是通過指針偏移的方法來得到各種信息,但這樣做不僅編程復雜咖杂,而且一旦協(xié)議有變化庆寺,程序修改起來也比較麻煩。在了解了編譯器對結(jié)構(gòu)空間的分配原則之后诉字,我們完全可以利用這一特性定義自己的協(xié)議結(jié)構(gòu)懦尝,通過訪問結(jié)構(gòu)的成員來獲取各種信息知纷。這樣做,不僅簡化了編程导披,而且即使協(xié)議發(fā)生變化屈扎,我們也只需修改協(xié)議結(jié)構(gòu)的定義即可,其它程序無需修改撩匕,省時省力鹰晨。下面以TCP協(xié)議首部為例,說明如何定義協(xié)議結(jié)構(gòu)止毕。其協(xié)議結(jié)構(gòu)定義如下:

#pragma pack(1) // 按照1字節(jié)方式進行對齊
struct TCPHEADER 
{
     short SrcPort; // 16位源端口號
     short DstPort; // 16位目的端口號
     int SerialNo; // 32位序列號
     int AckNo; // 32位確認號
     unsigned char HaderLen : 4; // 4位首部長度
     unsigned char Reserved1 : 4; // 保留6位中的4位
     unsigned char Reserved2 : 2; // 保留6位中的2位
     unsigned char URG : 1;
     unsigned char ACK : 1;
     unsigned char PSH : 1;
     unsigned char RST : 1;
     unsigned char SYN : 1;
     unsigned char FIN : 1;
     short WindowSize; // 16位窗口大小
     short TcpChkSum; // 16位TCP檢驗和
     short UrgentPointer; // 16位緊急指針
}; 
#pragma pack()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末模蜡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扁凛,更是在濱河造成了極大的恐慌忍疾,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谨朝,死亡現(xiàn)場離奇詭異卤妒,居然都是意外死亡,警方通過查閱死者的電腦和手機字币,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門则披,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洗出,你說我怎么就攤上這事士复。” “怎么了翩活?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵阱洪,是天一觀的道長。 經(jīng)常有香客問我菠镇,道長冗荸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任利耍,我火速辦了婚禮蚌本,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堂竟。我一直安慰自己,他們只是感情好玻佩,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布出嘹。 她就那樣靜靜地躺著,像睡著了一般咬崔。 火紅的嫁衣襯著肌膚如雪税稼。 梳的紋絲不亂的頭發(fā)上烦秩,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音郎仆,去河邊找鬼只祠。 笑死,一個胖子當著我的面吹牛扰肌,可吹牛的內(nèi)容都是我干的抛寝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼曙旭,長吁一口氣:“原來是場噩夢啊……” “哼盗舰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桂躏,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钻趋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剂习,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛮位,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年鳞绕,在試婚紗的時候發(fā)現(xiàn)自己被綠了失仁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡猾昆,死狀恐怖陶因,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垂蜗,我是刑警寧澤楷扬,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贴见,受9級特大地震影響烘苹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜片部,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一镣衡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧档悠,春花似錦廊鸥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缘回,卻和暖如春吆视,著一層夾襖步出監(jiān)牢的瞬間典挑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工啦吧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留您觉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓授滓,卻偏偏與公主長得像琳水,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子褒墨,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 簡單理解#pragma 作為較為復雜的預處理指令之一炫刷,它的作用為更改編譯器的編譯狀態(tài)以及為特定的編譯器提供特定的編...
    Umiade閱讀 2,002評論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,103評論 1 32
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,180評論 25 707
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料郁妈? 從這篇文章中你...
    hw1212閱讀 12,732評論 2 59
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,393評論 8 265