静态指针,用NEW分配内存,如果不主动删除,在程序(进程)结束后会自动释放么?

2024-11-29 15:42:56
推荐回答(3个)
回答1:

我先引用一段关于进程的概念:
进程的定义
  进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
主要两点
  进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
  进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。

无论你是怎么分配的,也无论你是分配在堆还是栈上面的,很明显,它都是属于进程的,当程序退出的时候,进程都不存在了,进程所占有的所有资源,操作系统都会收回的,所以你不用担心了
=====================
希望我的回答对你有所帮助

回答2:

LINUX不太清楚,反正WINDOWS系统会在程序结束时,把程序中用到的所有内存都释放掉,即使你没有delete。这个跟编译系统已经没关系了,是操作系统的功能。而且跟你用不用静态指针也没关系。

回答3:

楼上所述的只是一个方面,那是程序比较小,运行比较短时,可以采用的。
但如果你编译的程序要长时间运行,或者数据吞吐量特别大,强烈建议使用delete。一个大程序在运行期间要做自己的内存管理的,往往一些劣质软件,在运行期间占用内存不停的扩大,响应速度也慢慢变缓,主要是内存管理做的不好。
以后做大软件或者其中的某个模块,肯定需要注意的,因为你的总程序在运行,系统不会随便回收你的没有释放的资源,那样做很危险。
养成这样的习惯是很好的,即使大多数情况下没有用,也好!