在C+终止时返回内存+;程序 当C++程序终止时,运行过程中使用的RAM被清理并返回系统,对吗?p>

在C+终止时返回内存+;程序 当C++程序终止时,运行过程中使用的RAM被清理并返回系统,对吗?p>,c++,memory,C++,Memory,问题1) 这个内存是由C++语言特性管理的还是由计算机硬件本身管理的? 问题2) 如果在Unix终端中使用ctrl+Z终止运行,内存是否高效/安全地返回 当C++程序终止时,运行过程中使用的RAM被清理并返回系统,正确? 对。我希望你说的系统是指操作系统 问题1)这个内存是由C++语言特性管理的还是由计算机硬件本身管理的?< /P> 返回的内存由操作系统管理(如果我正确理解了这个问题)。在返回操作系统之前,内存由进程管理;在底层,也就是说,由各种语言功能管理,如分配-释放机制、构造函数、析构函数

问题1) 这个内存是由C++语言特性管理的还是由计算机硬件本身管理的? 问题2) 如果在Unix终端中使用
ctrl+Z
终止运行,内存是否高效/安全地返回

<>当C++程序终止时,运行过程中使用的RAM被清理并返回系统,正确?

对。我希望你说的系统是指操作系统

问题1)这个内存是由C++语言特性管理的还是由计算机硬件本身管理的?< /P> 返回的内存由操作系统管理(如果我正确理解了这个问题)。在返回操作系统之前,内存由进程管理;在底层,也就是说,由各种语言功能管理,如分配-释放机制、构造函数、析构函数等

问题2)如果在Unix终端中使用ctrl+Z终止运行,内存是否高效/安全地返回

Ctrl+Z将挂起该进程。它不会终止它。因此,只要进程没有终止,内存就不会返回到操作系统

在linux中,Ctrl+C终止进程,然后内存返回操作系统

是由C++语言特性管理的内存还是由计算机硬件本身管理的?< /P> 这两种情况都会发生,假设正确关机(与撞车或死亡相比)。标准C/C++库通过操作系统系统调用释放它分配的任何(未泄漏的)内存,最终操作系统清除所有泄漏的内存

如果在Unix终端中使用ctrl+Z终止运行,内存是否高效/安全地返回

Ctrl-Z挂起Unix上的进程。如果使用kill或kill-9终止它,操作系统将(安全/高效地)回收内存

Q:当C++程序终止时,运行时使用的RAM 已清洁并返回系统,对吗

A:对。这对于任何程序都是正确的,不管它是用什么语言编写的,也不管它是Linux、Windows还是其他操作系统

q是由C++语言特性管理的内存返回或由 计算机硬件本身

答:两者都不是:操作系统负责管理进程的内存

Q:如果我终止一个任务,内存是否能高效/安全地返回 在Unix终端中使用ctrl+Z运行

答:操作系统资源(如内存)被释放。但是,如果你不优雅地杀死一个程序,你可能会留下文件损坏、IPC锁定以及其他操作系统无法控制的坏东西

“希望有帮助

  • 通常两者都有。至少假设正常终止,析构函数将运行,这通常会释放与这些对象关联的内存。一旦程序退出,操作系统将释放该进程拥有的所有内存

  • 强制终止通常不会运行析构函数之类的,但任何合理的操作系统都会在进程终止后进行清理,不管它是否干净地进行了清理。但是有一些限制,所以如果您使用了锁文件之类的东西,它可能无法清理这些文件


  • 他们说动态分配的内存只由程序员返回。例如,一个

    myclass *obj = new myclass();
    
    总是要有一个相应的

    delete obj;
    
    somwehere,否则您的程序将泄漏内存,这意味着操作系统可能认为内存的某些部分已被使用,而实际上它们并未被使用-在多次泄漏之后,您的内存可能会被错误内存完全耗尽,您将无法对其进行任何处理

    然而,“C++”(实际上意味着“编译器”)负责在堆栈上分配的所有内容,如

    myclass obj;
    
    只要析构函数确实正确地删除了在该类中动态创建的任何内容

    然而,在实践中,如果您泄漏内存,现代操作系统会处理它,并且通常会清理它。通常,在某些系统中,操作系统将能够识别您实际使用的内存部分,然后在应用程序终止后立即释放内存中的所有内容


    内存泄漏通常只会在应用程序需要大量内存,需要不时正确释放一些内存时,或者在内存有限的系统(如控制台)上,在循环中(如游戏中)连续泄漏内存时,才会真正产生问题。

    Ctrl-Z通常不会终止进程。我在回答中提到,同样。还有鲜为人知的
    kill-2
    kill-3
    。内存将被回收,独立于终止方法。我不知道将运行RAM返回到OS的C++运行时。通常,一旦一个C++进程触摸了一个RAM页面,它就为进程的生命保留它。@ DeftHyg代码,我同意进程运行时所说的内容。但这并不妨碍stdlib在正常终止期间将所有内存页返回操作系统。我不确定是否是stdlib在关机期间返回内存。我认为是操作系统在进程退出后获取了所有内存,但我不是100%确定。一般来说,除非您通过mallopt()更改了行为,否则我认为我同意灵巧的代码,即stdlib不会返回内存。不过,我不能说我确实验证过这一点。@MichaelGoldshteyn:我的观点是stdlib不会将内存页返回到操作系统。这是可以做到的(我认为JVM是在压缩之后做到的)。操作系统在进程停止执行后回收内存页,stdlib与此无关。对不起,你说的“现代操作系统会处理它”是完全错误的。内存泄漏仍然是一个非常现实的陷阱。这就是为什么像Java运行时或.Net这样的垃圾收集环境如此流行的原因