首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
内存对齐的规则
返回列表
发新帖
内存对齐的规则
[复制链接]
发表于 2023-4-11 22:13:42
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
1、 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身长度) 的倍数。2、 在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。
如:
struct ex{
char a;
double c;
int b;
};
复制
代码
char占一个字节,起始偏移为0 ,double 占8个字节,min(#pragma pack()指定的数,这个数据成员的自身长度) = 8(VC6默认8字节对齐),所以double按8字节对齐,起始偏移必须为8的倍数,所以起始偏移为8,在char后编译器会添加7个字节的额外字节,不存放任意数据。int占4个字节,按4字节对齐,起始偏移为16,正好是4的倍数,无须添加额外字节。到此规则1的数据成员对齐结束,此时的内存状态为:
oxxxxxxx|oooooooo|oooo
共占16个字节。还要继续进行结构本身的对齐,(规则2)对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行对齐,ex结构中最大数据成员长度为double,占8字节,而默认的#pragma pack 指定的值为8,所以结果本身按照8字节对齐,结构总大小必须为8的倍数,16既满足。
回复
使用道具
举报
返回列表
浏览过的版块
Oracle
公有云
Mysql
物联网
向量数据库
运维.售后
分布式数据库
人工智能
DevOps与敏捷开发
莱莱
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表