#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];
};
Run Code Online (Sandbox Code Playgroud)
这种结构中的布局是否会导致目标平台上的对齐问题?我理解它很大程度上取决于一个平台,但通常允许C编译器对结构进行填充,例如在32位机器上,其中'int'是32位长:
struct my_struct
{
int w[MAX_SIZE];
}
Run Code Online (Sandbox Code Playgroud)
是对齐的(就像我所理解的那样)因此编译器可能不会对其布局做任何其他事情,但在结构中添加"enum my_enum"可以在这样的机器上无法对齐地获得结构.我应该做些什么来避免这种情况吗?我应该完全避免它吗?
非常感谢澄清!
标记
答案是否定的,你不需要做任何事情.如果添加字段将中断对齐,则编译器将在适当的位置应用填充以重新对齐它.
在你的情况下,enums很可能被实现为,int所以你不会首先遇到这个问题.
一个更好的例子是:
struct my_struct
{
char ch;
int w[MAX_SIZE];
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器可能会在之后放置3个字节的填充ch以保持w与4个字节对齐.