本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!