鱼C论坛

 找回密码
 立即注册
查看: 2203|回复: 6

关于实验五

[复制链接]
发表于 2012-9-17 17:30:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
对于实验五中   假设data段中有N个字节    那么它所占的的实际空间为多少??
鱼大给的答案是(N/16+1)*16
   我认为是不对的  因为在第一段代码 中:数据段和栈段都为8个字占16个字节 ,按公式的话就是这两个段每一个实际占位32个字节,就是栈段地址跟code段要差2个位,,但栈段实际在debug中与code段相差1个位

我认为正确答案是:(n除以16)取整  然后再乘以16  这里的取整的意思是向上取整,不是四舍五入


我刚学,求高手解答????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-18 14:23:30 | 显示全部楼层
呵呵,  楼主,   你的这种探索的想法很好,但是  (N/16+1)*16这是对的

问题:(N/16+1)*16  对不对?

分析:
          因为   段是以paragraph(16-byte)对齐的。    也就是说 16个字节为一个单位分配的,例如不足16字节,则段的大小默认为16,,不足32而大于16则默认分配32字节   (这是系统的机制),  还有 段的  范围16byte ~ 64kb,     这是在16位汇编的前提下

比如:
        n  为16个字节 (为一个段),当 n 为17 就再增加一小段,  这是就是两个段 ,共32字节

所以,由此可知,假设data段中有N个字节    那么它所占的的实际空间为多少?   那答案就是:(N/16+1)*16            

(N/16+1)*16,  公式解释:     n/16  代表  有多少个16字节,    (N/16+1)  这个加 1  是指  (0,16】  就是指  大于0  但  不满16的  也算一个段,      (N/16+1)*16     呵呵, 这个就不用说了把,  you are understand,  this

呵呵   希望能帮助你, bye~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-18 18:38:56 | 显示全部楼层
其实你的答案和正确答案差不多啊
人家是n除以16取整+1的和再乘以16.
你的就差+1了
不过举个反例立即可以证明你的结果是错的。比如当N=1的时候,你算出来的结果是0,所以你算错了。
编程的时候这种边边角角的地方差个1很正常,我在头脑不清醒的时候经常自己猜个差不多的答案,然后开始举一些对它进行修正
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-9-18 22:46:11 | 显示全部楼层

哦 这样啊  想明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-9-18 22:46:48 | 显示全部楼层
谢了      想明白了   楼上的:(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-21 19:23:47 | 显示全部楼层
bu明白啊  到底 是怎么回事呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-27 23:07:54 | 显示全部楼层
:$:$学习了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表