a373994379 发表于 2012-9-17 17:30:36

关于实验五

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

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


我刚学,求高手解答????????

梦幻羽羽 发表于 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~

仰望天上的光 发表于 2012-9-18 18:38:56

其实你的答案和正确答案差不多啊
人家是n除以16取整+1的和再乘以16.
你的就差+1了
不过举个反例立即可以证明你的结果是错的。比如当N=1的时候,你算出来的结果是0,所以你算错了。
编程的时候这种边边角角的地方差个1很正常,我在头脑不清醒的时候经常自己猜个差不多的答案,然后开始举一些对它进行修正

a373994379 发表于 2012-9-18 22:46:11

梦幻羽羽 发表于 2012-9-18 14:23 static/image/common/back.gif
呵呵,楼主,   你的这种探索的想法很好,但是(N/16+1)*16这是对的

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


哦 这样啊想明白了

a373994379 发表于 2012-9-18 22:46:48

谢了      想明白了   楼上的:(

痛彻心扉 发表于 2012-11-21 19:23:47

bu明白啊到底 是怎么回事呢

□为 发表于 2012-11-27 23:07:54

:$:$学习了!!!
页: [1]
查看完整版本: 关于实验五