首页  >   经验  >   结构体对齐问题分析

结构体对齐问题分析

查看 codexia 的博客 2015-06-24 16:06:23 1218
结构体   对齐  
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
简介做项目时遇到了这个结构体对齐的问题,虽然解决了,但是始终没有彻底弄明白。今天突然想起来,之前看到网站的《关于成员对齐方式》时,那是没有看懂,惭愧。所以好好总结了一下,分享给大家。
    在做项目时在定义结构体时,因为是对数据成员都进行了字节拆分,并且从头到尾,数据类型交错出现,这个是对数据结构的定义,并不是我故意为之,就好像TCP/IP协议的字段一样。然而在定义结构体时,确实是按照一个个的类型来写的,确定无误后,发现运行结果还是有错误。但是通过断点跟踪发现,前几个字段的值是正确的,后面的都错误。再通过内存窗口查看(在调试状态下,菜单“调试”->“窗口”->“内存”->“内存1/2/3/4”选择其中一个,然后输入变量或指针名,回车),这样就看到了内存的数据。奇怪的是,这些数据是正确的。为什么放到结构体中就不对了呢?
    然后灵感一闪,似乎之前也碰见过,解决了这个问题,那些代码没有这个问题。找到那个代码一看,仔细比对后,突然发现是结构体定义的头和尾有编译指令,我加进去后,结果正确了。
    这让我想起之前网站一篇文章,《关于成员对齐方式》的作者写的很好。那是我还没有这方面的经验,也没怎么看懂。说来惭愧,向他学习了。今天又回去看看,一字一句沉下心看,发现了不少宝贵的经验。看了一下,文章里也用了编译器指令#pragma pack. 解释很到位 。不过刚开始接触这个的,或许还是有点迷糊。我在此稍作解释,这也是我的学习心得,分享一下。
    编译器指令#pragma pack这个的用法,我另外写一篇文章详细解释。在此就只解释这种原理。为什么我的结构体取到数据和预期的不一样呢?为什么结构体的大小并不是所有成员大小的总和呢?
  &nbs
1.微信扫码
2.点击按钮,粘贴命令
自动刷新 手动刷新
命令:rd eY~D[ 复制
提示:如果您发送了命令,自动刷新会展开全文。自动刷新最多60秒,超过60秒请点击手动刷新。
创作不易,汗水不止!为防止劳动果实被爬虫窃取,开启了反爬机制,需要您发送命令继续阅读。取关会再次出现此提示。一段时间后出现此提示,请再次发送即可。如有问题,请加客服微信Freeme007处理。感谢您的理解。
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
文章标题:结构体对齐问题分析
文章地址:http://www.cjjjs.com/article/624201523616538
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:结构体对齐问题分析
收藏 0 点赞 0
公众号
微信赞赏
支付宝赞赏
领支付宝大红包
QQ群

相关阅读

  1. C++ Primer Plus 6th 4.13 编程练习题 第6题 结构体数组的初始化和使用 查找全网同类文章
  2. C++ Primer Plus 6th 4.13 编程练习题 第5题 结构体的声明、初始化和使用 查找全网同类文章
  3. C++ Primer Plus 6th 4.12 复习题 第15题 动态创建结构体变量 查找全网同类文章
  4. C++ Primer Plus 6th 4.12 复习题 第9题 结构体变量的声明并初始化 查找全网同类文章
  5. C++ Primer Plus 6th 4.12 复习题 第8题 结构体类型声明 查找全网同类文章
  6. 循环遍历结构体的实现方法和代码实现 查找全网同类文章
  7. 结构体封装的STL string,通过new新建对象后通过delete释放报错 查找全网同类文章
  8. GDI+深入学习之画笔对齐问题 查找全网同类文章
  9. static静态控件对齐显示方式全面分析 查找全网同类文章
  10. SetTextAlign设置文本对齐方式:2 垂直方向对齐方式的深入理解分析 查找全网同类文章
分享到:
分享文章[结构体对齐问题分析]到QQ空间

相关阅读

猜您感兴趣