我的软件有内存泄漏,是不是大的内存泄漏问题会把操作系统影响到系统出错或不能重启的地步呢?

解决方案 »

  1.   

    一点个人见解:    对于完善的操作系统(包括从硬件CPU的虚拟内存、核心运行级别 到 软件的操作系统内核、用户运行模式),应当具备能力在进程运行出现内存泄漏、内存非法访问后采取措施弥补。    当前主流的(带虚拟内存、核心运行级别)的芯片、操作系统,至少能够完成在程序终止后,负责清除、释放与该进程相关的所有内存页表以及相关资源,并提示用户出错。而对于用户软件运行中产生的内存泄漏,操作系统并无特殊处理,而只是容忍(因为系统无法分辨资源使用是否得当),直至累积错误导致系统性能下降(譬如虚拟内存太大导致磁盘交换页操作消耗了系统的大部分资源),此时的解决办法是——加大内存。操作系统则认为自己对此并无责任,但个人觉得——系统至少可以在发生此类情况时,提前给用户提示(类似防火墙)。    而新的系统平台(如Java和.Net)则进一步的改进了内存管理的功能。利用智能指针、引用计数等方法来搜集不再被使用内存并选择时机释放,从而规避了内存泄漏的风险。但带来的副作用则是系统开销加大以及导致应用程序的实时性能下降。
      

  2.   

    我以前写过一段实现内存泄漏的
    在一线程里
    var
      tmp:TObject;
    begin
      while true do
      begin
        tmp:=TObject.Create;
      end;
    end;
    没有发生什么特别的事情,就看到内存在疯涨,然后系统提示内存不足,最后重启