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

  • Post author:
  • Post category:其他


在很多机器上,比如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位对齐。



版权声明:本文为DigBug原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。