使用自定义堆的类似 malloc 的函数

2024-06-20

如果我希望使用自定义预分配堆构造类似 malloc 的功能,那么 C 中最好的方法是什么?

我的具体问题是,我有一个可映射(类似内存)的设备,已将其放入我的地址空间中,但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的对象。

我知道 malloc、free 和其他类似的函数用于在堆上执行这种分配,但是有没有办法使用这种函数提供的逻辑来实现其动态行为,同时提供我自己的地址空间来操作有问题的堆?


mallocfamily 是一组相当复杂的库函数。他们做了很多簿记工作,比如堆的哪些部分正在使用等等。

使用标准内存分配器的相对简单的方法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);

现在放置在该区域的任何东西part_of_heap-part_of_heap+nbytesby malloc 将进入您自己的映射区域。但这不受支持,并且不能保证任何分配实际上都会到达那里。

否则,您将需要实现自己的内存分配器,它必须进行簿记。对于初学者来说,链表就足够了。据我所知,没有开放的实施可以满足您的需求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自定义堆的类似 malloc 的函数 的相关文章

随机推荐