• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wb-code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

结构体内存对齐

一、结构体怎么对齐?

1、先计算每个成员变量的对齐数。
对齐数 = 操作系统的默认的对齐数与各个成员变量数据类型大小的较小者
例:int类型大小为4字节,而64位操作系统对齐数就是8字节,(4<8)那int类型对齐数就定为4字节。
2、成员变量要对齐到自身对齐数的整数倍的地址处。
例:int类型变量的对齐数为4,那int类型将放置的地址只能是4的整数倍,比如放在0、4、8、12依次延伸。
3、最后结构体的总大小必须是结构体成员中最大对齐数的整数倍。
4、如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍

举例说明:

struct S1
{
  char a;
  int  b;
  char c;
}
此时sizeof(struct S1)等于12

图片

struct S2
{
  char a;
  char b;
  int  c;
}
此时sizeof(struct S2)等于8

图片

二、为什么要进行结构体对齐?
图片

三、如何安排变量可以让结构统占用内存大小更小?
将对齐系数小的字段,尽可能放在一起,尽量减少空白填充。

四、关键点
内存对齐其实就是典型的空间换时间的方式,来达到优化的目的。

posted on 2026-03-09 18:51  心事不在脸上  阅读(2)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3