malloc像使用自定义堆的函数
如果我希望使用自定义预分配堆构建malloc类功能,那么C中最好的方法是什么?
我的具体问题是,我有一个已经放入我的地址空间的mmap-capable(类似于内存的)设备,但我需要获得更灵活的方式来使用这个内存来存储随着时间的推移将被分配和释放的对象。
我知道malloc,free和其他类似的函数被用来在堆上执行这种分配,但是有什么办法可以使用这种函数提供的逻辑来实现其动态行为,同时提供我自己的地址空间来作为有问题的堆?
Boost.Interprocess具有适用于共享内存段的有状态分配器:它们也可以重用于其他映射的地址范围。
否则,你可能需要推出自己的。 按照复杂性的顺序,您可以考虑:
哪些是合适的将取决于你没有给出的一些信息:
realloc
malloc
和family是一组相当复杂的库函数。 他们做了很多簿记,比如堆中的哪些部分正在使用等等。
使用标准内存分配器malloc
一个相对简单的方法是使用自定义映射重新映射默认堆。
void * part_of_heap = memalign(sysconf(_SC_PAGESIZE), nbytes);
void * ret = mmap(part_of_heap, nbytes
, PROT_READ | PROT_WRITE, MAP_FIXED, fd, 0);
if (ret == MAP_FAILED) {/* ... */}
free(part_of_heap);
现在,放在malloc的part_of_heap
- part_of_heap+nbytes
中的任何内容都将进入您自己的映射区域。 尽管这不受支持,但并不保证任何分配将实际到达那里。
否则,你需要实现你自己的内存分配器,它必须做记账。 链接列表将为初学者做。 我知道没有开放的实施可以满足您的需求。
链接地址: http://www.djcxy.com/p/82529.html