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

本文介绍了如何在需要128位对齐的机器上定义数据结构。通过添加pad字节和使用联合数据类型,可以确保数据结构在包含可变部分时仍能正确对齐。具体实现中,利用了条件编译和算法((sizeof(struct) + 127) & 0xFF80)来动态计算pad字节数,以满足128字节对齐的要求。
摘要由CSDN通过智能技术生成
在很多机器上,比如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位对齐。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值