如何实现128字节对齐的数据结构

在很多机器上,比如Cell,要求数据结构必须128位对齐。这就对数据结构的定义提出了额外的要求。

一种较直观的方法是:在数据结构中添加pad字节,使得整个数据结构填充为128位,例如:

typedef struct _alf_error_msg{
int error_code;
int error_type;
int extra_error_code;
int error_handle_policy;
unsigned char _pad[128 - 4*4];
} error_msg;

其中_pad数组既是为了使整个数据结构达到128位字节而额外填充的字节。


然而,如果数据结构中出现可变化的结构,如使用#ifdef进行条件编译,那填充字节又该如何确定?
这里有一个trick,可以实现该功能:

typedef union _alf_error_msg{
struct error_msg_content{
int error_code;
int error_type;
#ifdef contion_1
int extra_error_code;
#endif
int error_handle_policy;
}
unsigned char _pad[(sizeof(struct error_msg_content) + 127) & 0xFF80];
} error_msg;

在这里由于extra_error_code不能保证始终存在,因此我们不能确定_pad的字节数。在这里我们使用联合数据类型,将_pad的字节数确定为保证容纳struct _error_msg_content的最小字节数。
根据算法(sizeof(struct) + 127) & 0xFF80,可以确保这点。 注意0x80=128,这点可以确保128位对齐。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值