首页
社区
课程
招聘
[原创]我眼中的数据对齐
2005-6-16 16:37 17611

[原创]我眼中的数据对齐

2005-6-16 16:37
17611
                           我眼中的数据对齐

                                                         作者:溟初

声明:这篇文章是用word写成的,里面含有一些表格、流程图什么的,不易贴出,在此仅列一下目录,感兴趣者可以下载察看!

    在看雪论坛关于memcpy的帖子 (<memcpy应该怎样写,同时庆祝新版开张>http://bbs.pediy.com/showthread.php?threadid=14128) 中谈及了数据对齐的话题,重新唤起了我对它的思考(以前一直都似懂非懂,逐渐淡忘了^_^),纯属个人见解,请批评指正!

一、什么是数据对齐?请看官方的解释:

二、数据对齐随处理器和编译器的不同而不同,处理好数据对齐可以提高程序的时空效率(节省空间,提高效率),特别是在汇编程序中。
1、在处理器方面:
2、在编译器方面(以微软的ml、link为例):
(1)、全局变量:
(2)、函数参数和局部变量:
(3)、结构体字段对齐(在移植程序时需要特别考虑,写网络程序好像也很重要):
(4)、指令对齐:
(5)、段的对齐类型:
(6)、PE文件中的SectionAlignment、FileAlignment:

三、尝试分析\VC98\CRT\SRC\PLATFORM \memcpy.asm(VC6.0安装盘上,vc7.0在安装盘crt\src\intel\下,你也可以从网上找到)
1、覆盖的情况:dst>src && dst < src + len时,如下图:
2、memcpy.asm代码分析。

四、结束语:
这篇心得终于完成了,感觉自己的表达能力还是很有限,请批评指正,我的e_mail:hejiwen2001@sohu.com,如果它能给你带来帮助,我将很欣慰!,至少没有白忙活J

Reference:
1、《The art of assemle language》    来自 http://asm.yeah.net/
2、《windows核心编程》                来自 http://www.infoxa.com/
3、《INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986 》    来自 http://purec.binghua.com/
4、http://blog.dreambrook.com/soloist/archive/2004/12/12/388.aspx
5、http://wncj.vicp.net/course/hep/huibianyuyan/04-3.htm
6、http://msdn.microsoft.com/library
还有其他一些相关的网络资源,在此一一谢过附件:AlignInMyOpinionPDF.rar

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

最后于 2018-8-6 09:29 被kanxue编辑 ,原因:
收藏
点赞7
打赏
分享
最新回复 (15)
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
hejiwen 2 2005-6-16 16:53
2
0
更新了一下附件!请管理源删除第一个,谢谢!
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
北极星2003 25 2005-6-16 17:13
3
0
不错,还画了流程图
雪    币: 515
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
RoBa 16 2005-6-16 23:10
4
0
呵呵不错,很正式的样子
雪    币: 328
活跃值: (925)
能力值: ( LV9,RANK:1010 )
在线值:
发帖
回帖
粉丝
liyangsj 25 2005-6-17 08:27
5
0
支持一下!
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
hejiwen 2 2005-6-17 08:59
6
0
我排了一下版,然后把它转化为PDF了。谢谢大家的支持!
雪    币: 230
活跃值: (180)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
qINGfENG 4 2005-6-17 12:01
7
0
不错!支持一下!
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cutepig 2005-6-18 10:06
8
0
太好了!!
雪    币: 207
活跃值: (41)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
gnucool 1 2005-6-19 02:59
9
0
楼主讲得很好呀! 不过还是建议楼主在文章中讲清楚是在什么操作系统下的实践。因为在Win32下的数据对齐是默认32位的,但在DOS下是16位的。例如一个DWORD在Win32下是4字节,但在DOS下只是2字节!不说清楚的话极易造成初学者的混淆!另外在64位操作系统中,这些数据的大小还没有真正统一起来,Microsoft在Windows 64中规定了int,float等等还是4字节的,但只是指针转为8字节了!偶们老师说写论文一定要严谨,建议楼主作相应的补充!
雪    币: 288
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
hejiwen 2 2005-6-20 08:37
10
0
最初由 gnucool 发布
楼主讲得很好呀! 不过还是建议楼主在文章中讲清楚是在什么操作系统下的实践。因为在Win32下的数据对齐是默认32位的,但在DOS下是16位的。例如一个DWORD在Win32下是4字节,但在DOS下只是2字节!不说清楚的话极易造成初学者的混淆!另外在64位操作系统中,这些数据的大小还没有真正统一起来,Microsoft在Windows 64中规定了int,float等等还是4字节的,但只是指针转为8字节了!偶们老师说写论文一定要严谨,建议楼主作相应的补充!

谢谢你的建议:我是在win2000 professional上试验的,汇编器是:masmv328.0
这不是论文,只是我的一点心得,写出来于大家共享。说得对,其实不论写什么都要严谨,对自己负责,也是对看文章的人负责,再次谢谢你!
雪    币: 224
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
blackjake 2005-12-26 17:26
11
0
好!不错!一直似懂非懂,看看楼主的文章。
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
starluck 1 2005-12-26 19:00
12
0
不太明白
雪    币: 60
活跃值: (881)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wonderzdh 1 2018-1-22 10:37
13
0
这篇文章的附件加载不了了。
雪    币: 965
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ielts 2018-1-23 11:26
14
0
这篇文章的附件加载不了了
雪    币: 3170
活跃值: (129)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
我是一条咸鱼 2018-8-6 09:24
15
0
附件:404了
雪    币: 32403
活跃值: (18855)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2018-8-6 09:29
16
0
灵音 附件:404了
已修正了:https://bbs.pediy.com/upload/2005/41/files/aligninmyopinionpdf.rar
游客
登录 | 注册 方可回帖
返回