是否可以在C中使联合右对齐?
例如,联合的默认对齐方式如下:
union{
uint32_t v4;
__uint128_t v6;
}ip;
//in memory
//aaaa
//bbbbbbbbbbbbbbbb
但我想让工会正确对齐:
// aaaa
//bbbbbbbbbbbbbbbb
是否有可能在 C 中实现这一点?
回答
您可以为此使用 C11 匿名结构。
union {
#pragma pack(1)
struct {
char padding_[sizeof(__uint128_t) - sizeof(uint32_t)];
uint32_t v4;
};
#pragma pack(0)
__uint128_t v6;
} ip;
// usage
ip.v4 = 0x7F000000;
- I suggest to add attribute 'packed' to ensure that no implicit padding bytes were added