一个关于内存释放的奇怪问题(0分)

  • 主题发起人 taozhiyu
  • 开始时间
T

taozhiyu

Unregistered / Unconfirmed
GUEST, unregistred user!
在windows xp中打开windows任务管理器 然后打开notepad 你会发现进程中有notepad.exe
以及他的内存使用情况。然后打开about窗口,发现内存使用量增加。关闭后,内存使用
量没有减少。这是为什么?
而且,如果你自己写一个动态窗口,会发生同样的问题,如下!
procedure OpenWindows();
var
Form : TForm1;
begin
Form := TForm1.Create(self);
try
Form.ShowModal;
finally
Form.Free;
end;
end;

不信的话,你可以做一个看看!
我想知道,free的时候到底释放了什么?
 
就是把剛才create的Form free掉
 
那么内存为什么没有减少?
 
我用2000试没有这个问题,不至于XP有Memory leak 吧
 
不知道啊!反正就是没减少
整个project关掉还是释放了
 
个人觉得动态窗口在调用一次并free后,还在内存里暂时留有一份备份,这样在下一次
创建时,速度会快很多(这是我在以前在老爷机器上跑windows得到的经验),估计要
得到确切的结论最好上msdn查查。
 
是的1我也有类似的感觉!!!不过不都说free就可以保证释放资源吗!
 
procedure Release;
Destroys the form and frees its associated memory.
procedure Free;
Destroys an object and frees its associated memory, if necessary.
agree with zyy04 .
 
是吗?那我看看!
 
可是,为什么notepad的内存也不能释放?为什么?
 
我用了release.结果如下
form2打开前 2380K
form2打开 2444K
form 2 关闭 2450
如果我反复开关form2,内存不减少,反而上升!!!
 
agree with zyy04
 
到底怎么释放?
 
从系统申请的内存,会由本地“堆”管理,即使你的程序释放了它,但是不一定会向系统释放,
而是仍然有本地管理着,下次你从堆申请内存,这些内存还可以利用,不需要再次向系统申请
另外,Release和Free的差别:Form的Release是在form的事件中使用的,如果你在form的时间响应中
free自己是不安全的,你还没返回,某些还要用到的东西给free了。release可以用在form的事件
里面,是因为它不是立即释放,而是通过一条消息,在外面free这个form
 
同意pipi:)
 
另外,如果要看进程什么的,不要用任务管理器,用WinSight32会好很多,这可是DELPHI自带的,
写系统级的程序一定用得到的
 
接受答案了.
 
顶部