静态指针,用NEW分配内存,如果不主动删除,在程序(进程)结束后会自动释放么?
比如:classABC{};staticABC*p=NULL;voidfunc(){p=newABC;....}....在程序退出时,如果没有显示的去调用deletep;...
比如:
class ABC {};
static ABC *p=NULL;
void func()
{
p = new ABC;
....
}
....
在程序退出时,如果没有显示的去调用
delete p;
那new 出来的空间会被释放么?不是说指针,而是指针指定的空间。
网上查了,好像又不用意见,而且很多人是在说静态变量本身,而不是它指向的空间,请高手确认一下,谢谢了。
另外应用是在LINUX系统上。 展开
class ABC {};
static ABC *p=NULL;
void func()
{
p = new ABC;
....
}
....
在程序退出时,如果没有显示的去调用
delete p;
那new 出来的空间会被释放么?不是说指针,而是指针指定的空间。
网上查了,好像又不用意见,而且很多人是在说静态变量本身,而不是它指向的空间,请高手确认一下,谢谢了。
另外应用是在LINUX系统上。 展开
3个回答
展开全部
我先引用一段关于进程的概念:
进程的定义
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
主要两点
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。
无论你是怎么分配的,也无论你是分配在堆还是栈上面的,很明显,它都是属于进程的,当程序退出的时候,进程都不存在了,进程所占有的所有资源,操作系统都会收回的,所以你不用担心了
=====================
希望我的回答对你有所帮助
进程的定义
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
主要两点
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。
无论你是怎么分配的,也无论你是分配在堆还是栈上面的,很明显,它都是属于进程的,当程序退出的时候,进程都不存在了,进程所占有的所有资源,操作系统都会收回的,所以你不用担心了
=====================
希望我的回答对你有所帮助
参考资料: http://baike.baidu.com/view/19746.htm
大雅新科技有限公司
2024-11-19 广告
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,...
点击进入详情页
本回答由大雅新科技有限公司提供
展开全部
LINUX不太清楚,反正WINDOWS系统会在程序结束时,把程序中用到的所有内存都释放掉,即使你没有delete。这个跟编译系统已经没关系了,是操作系统的功能。而且跟你用不用静态指针也没关系。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上所述的只是一个方面,那是程序比较小,运行比较短时,可以采用的。
但如果你编译的程序要长时间运行,或者数据吞吐量特别大,强烈建议使用delete。一个大程序在运行期间要做自己的内存管理的,往往一些劣质软件,在运行期间占用内存不停的扩大,响应速度也慢慢变缓,主要是内存管理做的不好。
以后做大软件或者其中的某个模块,肯定需要注意的,因为你的总程序在运行,系统不会随便回收你的没有释放的资源,那样做很危险。
养成这样的习惯是很好的,即使大多数情况下没有用,也好!
但如果你编译的程序要长时间运行,或者数据吞吐量特别大,强烈建议使用delete。一个大程序在运行期间要做自己的内存管理的,往往一些劣质软件,在运行期间占用内存不停的扩大,响应速度也慢慢变缓,主要是内存管理做的不好。
以后做大软件或者其中的某个模块,肯定需要注意的,因为你的总程序在运行,系统不会随便回收你的没有释放的资源,那样做很危险。
养成这样的习惯是很好的,即使大多数情况下没有用,也好!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询