2010-03-26 73 views

回答

3

嘗試6.54.8 Structure-Packing Pragmas

對於與Microsoft Windows編譯器的兼容性,GCC支撐一組#pragma指令,其改變 結構的成員的 最大對齊(大於零寬度 位域除外) ,隨後定義了工會和類別 。下面的n值 總是要求爲2的冪,並指定新的 以字節爲單位的對齊。

  1. #pragma pack(n)只是設置新的比對。
  2. #pragma pack()設置對齊到一個在 效果編譯時開始(見 還命令行選項 -fpack-struct[=<n>]看到代碼生成選項)。
  3. #pragma pack(push[,n])推動 內部堆棧上的當前對齊設置,然後可選地 設置新對齊。
  4. #pragma pack(pop)將對齊設置恢復爲保存在內部堆棧頂部的 (並且 刪除該堆棧條目)。請注意, #pragma pack([n])不會影響此內部堆棧;因此它是 可能有#pragma pack(push) 其次是多個#pragma pack(n) 實例和由單個 #pragma pack(pop)最終確定。

一些目標,例如, i386和powerpc, 支持ms_struct#pragma其中 奠定了結構爲記錄的 __attribute__ ((ms_struct))

  1. #pragma ms_struct on打開聲明結構的佈局。
  2. #pragma ms_struct off關閉已聲明結構的佈局。
  3. #pragma ms_struct reset回到默認佈局。
0

您可以嘗試在結構排列的屬性:

__attribute__((__aligned__(8))) 
0

除了列出的東西,你也可能有興趣在屬性( (packed)),它試圖在沒有任何填充的情況下佈置數據 - 基本上對齊設置爲1. Th在描述填充字節應該消失的文件或網絡協議中的數據佈局時非常有用。