首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 其他服务器 >

Solaris内存分配有关问题请问

2012-03-16 
Solaris内存分配问题请教solaris上分配内存的时候发现一个问题,申请了大内存之后,调用delete并没有把内存

Solaris内存分配问题请教
solaris上分配内存的时候发现一个问题,申请了大内存之后,调用delete并没有把内存释放给操作系统,还在被进程持有,后续再申请内存时,就直接从进程持有的内存分配

我想问一下,是否有系统命令可以强制执行内存的回收,或是是否有系统调用可以执行这样的操作?进一步说,是否可以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

热点排行