目录 上一页 下一页 附录A

第11章 更高级的技术 -311-




outseg
code

;****


pop
pop
ret
endp
ends

第三个插

end
bx
ax




入点******

main


;返回主过程






  程序中保留了一些"插入点",用于增加代码。如果就这样直接运行这个程序,那么会得到一个十分令人迷惑不解的结果:这个程序显示一行错误信息--"Not enought memory(没有足够的内存)"。难道内存真的不够吗?
  自由内存有618960个字节,600多KB内存竟然会不够,真让人摸不着头脑。
  确实,600多KB的自由内存不应该不够,即使没有600多KB也不至于连10KB都没有。难道我们编写的程序有什么问题?
  程序其实并没有任何问题,问题出在DOS身上,因为它太"懒惰"。大家都知道用户程序的长度是不确定的,长的有几百KB,短的可能只有几个BYTE。按理说DOS再调入一个程序时应该先确定这个程序的长度,按程序实际长度给它安排内存,但是DOS并没有这样做。无论程序有多长,它都是一咕脑地把所有自由内存都分给这个程序。所以虽然系统具有几百KB的自由内存,可当程序"GETMEM.EXE"调入内存运行时这几百KB的自由内存都成了它的"私有财产",所以当它再次申请内存时DOS已经没有内存可分了。
  因此我们说,一个应用程序在申请内存之前首先需要按自己的实际长度把DOS给它的内存重新划分一下,自己占了多少内存就保留多少,自己不占用的内存就要"无私"地"捐献"出来,这样才能向DOS申请内存,所谓"索取"之前先要"奉献"。
  好在DOS提供了一个专用于重新分配内存的功能:
功能号:4AH
用 途:重新划分内存

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 附录A