c++的程序结束后,还有可能一部分数据留在物理内存,没有被释放吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++的程序结束后,还有可能一部分数据留在物理内存,没有被释放吗?相关的知识,希望对你有一定的参考价值。

不会,操作系统就是擦屁股的.
有些内存没有释放的是因为你还有线程在执行.
还有就是内存泄露,不过这也是因为你程序没有停止.

比如执行链表操作的时候,控制不好就会导致内存泄露,在几十秒的时间就能让你电脑卡机,但是你一旦结束了程序的进程以后电脑就好了.( 这一点很容易说明操作系统是擦屁股的. )
参考技术A C++程序结束后所占用的内存资源都被释放,包括由于代码不严谨引起的内存泄漏,这是由操作系统进行回收的 参考技术B 可能,如果你new或者malloc之后,忘了回收了,那运行结束以后这些变量也会一直留存在电脑内存中。
不过下次重启电脑之后,这些内存就会被回收了。
参考技术C 可能的,因为C、C++并没有类似于Java的垃圾回收机制,
所以如果程序中存在动态申请的内存忘记释放的话,就会残留在内存中。
参考技术D 1.
在纯dos里用turbo
c++之类不开保护模式的话你就是在直接访问物理内存。
2.
windows
linux之类保护模式系统里你可以...
写驱动

静态局部变量

静态局部变量:

在局部变量前加上static关键字。

静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时也不会为其重新分配空间(静态局部变量仅在第一次调用时被初始化,第二次进入该函数时,不再进行初始化,此时它的值是第一次调用后的结果值)。它始终驻留在全局数据区,直到程序运行结束。若不显式对其进行初始化,则C++自动为其初始化为0.

静态局部变量只在定义它的函数中可见。

以上是关于c++的程序结束后,还有可能一部分数据留在物理内存,没有被释放吗?的主要内容,如果未能解决你的问题,请参考以下文章

linux啥情况就会使用到交换区swap,比如剩下多少内存,还有其他哪些因素

linux系统之swap分区

静态局部变量

linux内存

堆的Java和堆栈是否都驻留在RAM中,类似于C ++?

为啥linux物理内存还有很多,却开始使用swap