java mmap内存回收_在mmap内存中有效分配动态数组
发布日期:2021-06-24 17:12:32 浏览次数:3 分类:技术文章

本文共 685 字,大约阅读时间需要 2 分钟。

我有一个非常大的(在运行时固定,大约1000万到3000万)数组的数组 . 每个数组介于0到128个元素之间,每个元素为6个字节 .

我需要将所有数组存储在mmap的内存中(所以我不能使用malloc),并且数组需要能够动态增长(最多128个元素,并且数组永远不会缩小) .

我实现了一种简单的方法,即使用一个int数组来表示mmap内存中每个6字节块的状态 . 偏移量的值0xffffffff表示mmap的内存中的相应偏移量是空闲的,任何其他值都是数组的id(在我当前的实现中对块的碎片整理是必需的,块不能没有知道他们的数组的id来更新其他数据结构) . 在分配时,当数组超出其分配时,它将简单地迭代,直到找到足够的空闲块,并插入相应的偏移量 .

这就是分配数组和mmap的内存的样子,有点:

| 0xffffffff | 0xfffffff | 1234 | 1234 | 0xffffffff | ...

-----------------------------------------------------------------

| free | free |array1234[0]|array1234[1]| free | ...

这种方法的内存开销为 offset of furthest used block in mmap'ed memory x 4 (4字节ber int) .

对于这个具体案例,有哪些更好的方法?

我对此的理想要求是:

内存开销(任何分配表未使用的空间)<=每个元素1.5位4 * 6个字节每个数组

O(1)数组的分配和增长

转载地址:https://blog.csdn.net/weixin_34017915/article/details/114542521 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java从邮箱获取邮件_javaMail正确读取邮箱内容的方式
下一篇:java 泛型 e_java泛型中的? extend E 和 ? super E

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月27日 19时17分19秒