在C++中,用new申请了指针指向某内存却不用delete销毁,直到整个应用程序结束,会发生什么后果?试详述原
3个回答
展开全部
会导致内存泄露。
操作系统管理内存,是有一个资源队列的,用new申请一块内存时,从可用资源中取一块可用资源分配给应用程序。如果没有用delete归还系统,这块内存就不会返回资源队列,无法再分配给其他应用程序。
就好像你从图书馆借书,结果看完后你自己把书放回书库,没有在图书管理系统中体现出来这本书已经返回书库。别的人来查询借书时就找不到这本书。这种情况多了,就会出现本来书库满满的,但再也借不到书。
内存泄露也这样,明明还有很多内存,但程序编写不严谨,造成大量内存丢失。直到重启系统。
操作系统管理内存,是有一个资源队列的,用new申请一块内存时,从可用资源中取一块可用资源分配给应用程序。如果没有用delete归还系统,这块内存就不会返回资源队列,无法再分配给其他应用程序。
就好像你从图书馆借书,结果看完后你自己把书放回书库,没有在图书管理系统中体现出来这本书已经返回书库。别的人来查询借书时就找不到这本书。这种情况多了,就会出现本来书库满满的,但再也借不到书。
内存泄露也这样,明明还有很多内存,但程序编写不严谨,造成大量内存丢失。直到重启系统。
展开全部
申请了内存但是不用delete销毁,在程序运行期间内存一直被使用,操作系统认为这段内存属于该程序,不会将这段内存分给别的程序使用,如果使用delete之后,操作系统就获得了这段内存的使用权,可以将其分给别的程序或者线程。但是该程序结束时,操作系统将会收回该程序占用的所有资源,包括CPU资源,内存资源,显存资源。所以说,程序结束之后操作系统会把没有delete的内存区域释放出来给其他程序使用。但是为什么一定要在程序内部释放(delete)内存呢,是因为如果不释放的话,该段内存一直处于被使用的状态,操作系统无法将它分配出去,如果这种情况聚集起来会使得内存崩溃的,或者是说内存泄漏:该内存被占用,但是实际上什么事情也没有做。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个要分情况讨论:
1。在一般情况下,若你写的程序是应用程序,那么如果不用delete销毁,操作系统会帮你销毁……因为每一个程序都有一个4GB虚拟内存,程序关闭后会自动解除这个程序所有用过的对象…
2。在内核情况下,也就是说你的程序是驱动程序,调用的是native API的话,不delete却关闭了程序,那么这块内存必须等到重新启动后才能释放,系统是不会自动释放它的…
其实一般你只要知道1。就行了,如果想知道更多的内容,就先看一下IntelCPU的保护模式,弄清楚操作系统多线程的原理,然后再参考一些驱动开发的书籍,或者rootkit获取ring0级权限程序的原代码(比如CIH)等……
1。在一般情况下,若你写的程序是应用程序,那么如果不用delete销毁,操作系统会帮你销毁……因为每一个程序都有一个4GB虚拟内存,程序关闭后会自动解除这个程序所有用过的对象…
2。在内核情况下,也就是说你的程序是驱动程序,调用的是native API的话,不delete却关闭了程序,那么这块内存必须等到重新启动后才能释放,系统是不会自动释放它的…
其实一般你只要知道1。就行了,如果想知道更多的内容,就先看一下IntelCPU的保护模式,弄清楚操作系统多线程的原理,然后再参考一些驱动开发的书籍,或者rootkit获取ring0级权限程序的原代码(比如CIH)等……
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询