#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];
}
据我了解,结构体被对齐,编译器可能不会对其布局进行其他操作,但在结构体中添加“枚举my_enum”可能会使该结构体在这种机器上变得不对齐。 我应该采取任何特殊措施来避免这种情况吗?是否应该完全避免它?
非常感谢您的澄清!
马克
struct my_struct *p = malloc(sizeof(my_enum)+n*sizeof(int))
尝试分配少于MAX_SIZE
个整数。但是,如果存在填充,则最终分配的空间将不足。 - ugoren