gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:26:47 27 4
gpt4 key购买 nike

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

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

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

最佳答案

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 区域的任何东西都将进入您自己的映射区域。但是,这是不受支持的,并且不能保证任何分配实际上都会到达那里。

否则您将需要实现自己的内存分配器,它必须进行簿记。链表适合初学者。我知道没有可以满足您需求的开放实现。

关于c - 使用自定义堆的类似 malloc 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23341587/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com