![]() | 第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 |