免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: blackuhlan
打印 上一主题 下一主题

关于内存对齐,结构判断偏移量 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-07-17 11:25 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
12 [报告]
发表于 2008-07-17 11:40 |只看该作者
在网络编程方面,字节对齐显得尤其重要哦!

论坛徽章:
0
13 [报告]
发表于 2008-07-17 12:20 |只看该作者
原帖由 c_bee 于 2008-7-17 01:36 发表
up一下 一直对这个不太理解
试了一下 ...还是不理解
---------------------------
3.当前可用地址之后第一个能整除MIN(LO,LV)的地址就是内存对齐之后的地址。//这个好象不大对劲吧,能用个例子解释下么?


例如32位中,当前空闲地址为5,下一个变量类型是int,
则 LO=4, LV=sizeof( int) = 4
MIN(LO,LV) = 4
5%4=1; 8%4=0;所以变量被分配到8这个地址上。
其实我是在AIX上,内存顺序是1234,结构对齐和局部变量对齐都遵循这个规则,但windows上昨晚上发现局部变量对齐不是这样的,还不知道为什么。windows上内存顺序是4321,LO好像是16,#pragma pack(4)无法改动,据同事的经验是有编译选项,我不知道它的选项是什么

论坛徽章:
0
14 [报告]
发表于 2008-07-17 12:43 |只看该作者
跨平台还是很有用的

论坛徽章:
0
15 [报告]
发表于 2008-07-17 15:59 |只看该作者
那么在vc 6 里面 project settings | c/c++ | struct member alignment |  8 Bytes *
就是对这个的设置,以前还真没有考虑到这里呢

论坛徽章:
0
16 [报告]
发表于 2008-07-17 16:19 |只看该作者
所以,内存对齐就是尽量将变量的首地址放在能一次取出的地址上。

讲的很好, 很白话, 很直观, 受教了.

论坛徽章:
0
17 [报告]
发表于 2008-07-17 17:18 |只看该作者
实现一些协议的时候,因为内存对齐问题,可能导致发包错误,和协议不匹配,而程序不能正常工作……

错误隐藏很深,会很难找……

有时候就是要在编译的时候取消内存对齐吧。


怎么老有人去研究结构对齐这东西, 实际什么益处

论坛徽章:
0
18 [报告]
发表于 2008-07-17 17:29 |只看该作者
原帖由 mik 于 2008-7-17 00:05 发表
怎么老有人去研究结构对齐这东西, 实际什么益处


这个要研究的
第一次遇到因为对齐问题出的错误,
debug到三穷水尽,以为是CPU的指令出错了

论坛徽章:
0
19 [报告]
发表于 2008-07-17 19:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
20 [报告]
发表于 2008-07-18 08:55 |只看该作者
原帖由 飞灰橙 于 2008-7-17 17:29 发表


这个要研究的
第一次遇到因为对齐问题出的错误,
debug到三穷水尽,以为是CPU的指令出错了



你的CPU是自己做的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP