内存对齐和alignof,alignas

内存对齐和alignof,alignas

内存对齐的原因:

  1. 某些硬件平台不支持对未对齐对象的访问
  2. 对齐后,访问效率更高

内存对齐要求:

  1. 任何K字节的基本对象的地址必须是K的倍数。

为了实现这个要求,结构体中会有一些填充字节,即padding;另外,结构体的末尾可能也需要一些填充,这样结构体数组中的每个结构体元素都会满足对齐要求,即alignment。

举例说明:

struct S1 {
   
  int i; // size: 4
  char c; // size: 1
  // 3 bytes padding
  int j; // size: 4
}; // size: 12, alignment: 4

struct S2 {
   
  int i; // size: 4
  char c; // size: 1
  char d; // size: 1
  // 2 bytes padding
  long j; // size: 8
}; // size: 16, alignment: 8

struct S3 {
   
  int i; // size: 4
  int j; // size: 4
  char c; // size: 1
  // 3 bytes padding
}; // size: 12, alignment: 4

struct S4 {
   
  short w[5]; 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值