当前位置: 技术问答>linux和unix
Solaris内存分配问题请教
来源: 互联网 发布时间:2016-05-19
本文导语: solaris上分配内存的时候发现一个问题,申请了大内存之后,调用delete并没有把内存释放给操作系统,还在被进程持有,后续再申请内存时,就直接从进程持有的内存分配 我想问一下,是否有系统命令可以强制执行内...
solaris上分配内存的时候发现一个问题,申请了大内存之后,调用delete并没有把内存释放给操作系统,还在被进程持有,后续再申请内存时,就直接从进程持有的内存分配
我想问一下,是否有系统命令可以强制执行内存的回收,或是是否有系统调用可以执行这样的操作?进一步说,是否可以disable这个能力
thx
我想问一下,是否有系统命令可以强制执行内存的回收,或是是否有系统调用可以执行这样的操作?进一步说,是否可以disable这个能力
thx
|
呵呵,恰好前几天回国一个类似的问题,直接把当时的回复贴过来了,兄弟可以自己去实验一下。
------------------------------------------------------------------------------------------
这个问题比较复杂,而且有很大的系统依赖性,比如solaris和linux,Windows实现的方法都不一样
在linux里面是这样的机制实现的:申请的内存有个起始地址和终地址,如果free()的区域包含了终地址,那么所
有的空间会立即还给OS;如果不包含,那么这块内存一直不还给OS,直到程序退出。比如,你一次申请了一万个
内存区域,如果释放的是1-9999,那么这一万个区域都不会还给OS,如果释放的是第一万个区域,那这个区域会立
即还给OS
OK. 在Solaris下是这样的,无论释放从哪端开始,内存都不会还给OS,直到程序退出。
Windows我忘记了。
这样做的目的是因为,内存的申请和释放需要做很多的系统调用,为了防止程序频繁的申请和释放导致系统性能下
降,所以在程序释放的时候,暂不回收内存,当程序再申请的时候,就可以直接用原来申请又释放过的内存区域,
可以大大提高效率...
帖子:
http://topic.csdn.net/u/20090108/21/72b86450-b78b-4466-a9e2-b82b1bb9f5f3.html?924808195
------------------------------------------------------------------------------------------
这个问题比较复杂,而且有很大的系统依赖性,比如solaris和linux,Windows实现的方法都不一样
在linux里面是这样的机制实现的:申请的内存有个起始地址和终地址,如果free()的区域包含了终地址,那么所
有的空间会立即还给OS;如果不包含,那么这块内存一直不还给OS,直到程序退出。比如,你一次申请了一万个
内存区域,如果释放的是1-9999,那么这一万个区域都不会还给OS,如果释放的是第一万个区域,那这个区域会立
即还给OS
OK. 在Solaris下是这样的,无论释放从哪端开始,内存都不会还给OS,直到程序退出。
Windows我忘记了。
这样做的目的是因为,内存的申请和释放需要做很多的系统调用,为了防止程序频繁的申请和释放导致系统性能下
降,所以在程序释放的时候,暂不回收内存,当程序再申请的时候,就可以直接用原来申请又释放过的内存区域,
可以大大提高效率...
帖子:
http://topic.csdn.net/u/20090108/21/72b86450-b78b-4466-a9e2-b82b1bb9f5f3.html?924808195