2015-07-21 67 views
0

我使用__attribute__((packed));struct的項目存儲在內存中,因爲這對於一些低級開發至關重要。
由於__attribute__((packed));是GCC特定的我不知道是否有類似的解決方案適用於所有ANSI/C89/C99/C11編譯器或至少其中一些。__attribute __((packed))like屬性not GCC具體

+5

簡單的回答:**沒有**。閱讀[標準](http://port70.net/~nsz/c/c11/n1570.html)。但是您可以使用條件編譯來創建適用於不同編譯器的代碼。 OTOH,問題更多**爲什麼**你想打包'struct'。如果是序列化,這可能是一個壞主意。 – Olaf

+0

請注意,此類屬性可由[GCC](http://gcc.gnu.org/)和[Clang/LLVM](http://clang.llvm.org/) –

+1

理解。請注意,使用'屬性打包'往往會妨礙效率 - 或者至少,您以時間效率爲代價交易(獲得)空間效率。如果你不經常訪問這些結構,它可能並不重要。如果你做了很多,它可能會。 –

回答

3

沒有標準的方法來完成什麼__attribute__((packed))。典型的解決方案是使用#ifdef來處理不同的編譯器。你可以在這個SO post找到這個方法的一些解決方案,其中還包含了關於__attribute__((packed))的Visual C++等價物的細節。或者,GCC supports the Windows struct packing pragmas,所以如果你只關心Windows和GCC,你可以使用Windows方法。

2

沒有支持功能來控制標準指定的結構佈局。標準只是說明這個方面是實現定義的。

因此,如果您確實需要控制佈局,則需要使用編譯器特定的功能。如果你能找到一種避免需要這樣做的方法,那將是更可取的。