首页新闻找找看学习计划

如何模拟一个文件句柄的创建和释放

0
悬赏园豆:5 [已解决问题] 解决于 2019-07-27 18:33

在linux中的文件句柄创建时,会返回一个唯一的数字,例如0,1,2,3,4,5
在过了一会之后,3被释放了,那么再创建句柄,则可能返回3
我要模拟这个类似的过程,但是不能一直return h++;
因为这样句柄很快会被用光,我想把被标记的句柄,回收起来,
但是如果用字典或者数组存储,int的句柄量非常大,有没有既有不占用内存而且速度很快的句柄创建,回收再创建的方法啊

合纵师的主页 合纵师 | 初学一级 | 园豆:12
提问于:2019-06-26 21:39
< >
分享
最佳答案
0

你的意思是返回最小可用id?我知道一种高效的方法,你去看看《算法新解》这本书的开头。但是既不占内存又速度快,我觉得世界上没这种好事。

收获园豆:5
会长 | 大侠五级 |园豆:5332 | 2019-06-27 08:01

受益匪浅

合纵师 | 园豆:12 (初学一级) | 2019-06-27 19:41

我想了一个,可以把数组缩小很多倍的方法
例如,将数字分成多个区,例如0-1000为系统区
1000-到正无穷为用户句柄区
从1000开始,每1000分成一个小区用int的list来存储,当用户创建句柄时,返回这个区的h++,一直加到这个区的最大值,即2000,然后,创建一个新的区,把这个区的int加到list里面去,过了一会,1000-2000的这个区的句柄全部被释放了,那么则停止创建新的区,将从1000的这个区开始return h++,这样虽然有的区只使用了10%或者更低,那么int的表示的数字也足够维持系统所有的句柄数量,这样下来,这个句柄创建和消耗所使用的的内存数量减小了1000倍

合纵师 | 园豆:12 (初学一级) | 2019-07-27 18:38

对于一个系统而言,像我的windows系统,句柄量也就在4W多个左右,服务器即使翻100倍,也才400多万,这个句柄量完全用int表示,是非常庞大的内存,如果使用了分区,那么内存量会缩小1000倍,但是CPU使用量上去了。。。。不知道linux源码怎么实现的,看不懂linux的代码

合纵师 | 园豆:12 (初学一级) | 2019-07-27 18:41

@节操: 赞

会长 | 园豆:5332 (大侠五级) | 2019-07-29 10:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册