#define MAX_SIZE 8
enum my_enum
{
VAL1 = 0;
VAL2,
VAL3,
VAL4,
VAL_MAX
};
struct my_struct
{
enum my_enum e;
int w[MAX_SIZE];
};
此類結構中的佈局是否會導致目標平臺上的對齊問題?我理解在很大程度上取決於在一個平臺上,但一般C編譯器被允許做結構的填充,因此,例如32位機,其中「INT」是32位長的上:結構對齊
struct my_struct
{
int w[MAX_SIZE];
}
對準(如FAS據我所知),所以編譯器可能不會對其佈局做任何事情,但在結構中添加'enum my_enum'可能會使結構在此類機器上非對齊。我應該做什麼特別的事情來避免這種情況,我應該避免它嗎?
非常感謝澄清!
馬克
如果您認爲結構僅僅是元素的總和,您確實需要擔心。例如'struct my_struct * p = malloc(sizeof(my_enum)+ n * sizeof(int))'嘗試分配少於MAX_SIZE的整數。但如果有填充,最終分配太少。 – ugoren 2012-01-11 19:21:16