2015-01-06 101 views
1

是否有一些gcc便攜式編譯指示,所以我可以做C結構而不是要內存對齊?C結構對齊

我希望我的程序是可移植的(Linux,FreeBSD,MacOS,Cygwin),但我會留在gcc中。

回答

3

如果您不想對齊成員的結構(即沒有成員之間的任何填充),與gcc您可以使用packed屬性:

struct bla 
{ 
    int x; 
    char y; 
} __attribute__((__packed__)); 

或使用packpragma

#pragma pack(1) 
struct bla 
{ 
    int x; 
    char y; 
}; 
#pragma pack() 

或使用-fpack-struct選項進行編譯。

您還可以強制整個結構的最小對齊方式爲aligned屬性,但據我所知,您不能禁用整個結構與gcc的對齊方式。

+0

適用於Linux GCC over ARM CPU :) 任何想法,如果這是超越gcc便攜式? – Nick

+0

@Nick屬性或編譯指示是編譯器擴展,並且依賴於實現。大多數編譯器都有這樣的擴展,但是從編譯器到編譯器不同。 – ouah

+0

當然。這就是爲什麼我不尋求超越海灣合作委員會的兼容性 – Nick