gpt4 book ai didi

c - 是否有一个 malloc 实现在它自己的堆之外进行簿记?

转载 作者:太空狗 更新时间:2023-10-29 17:24:36 27 4
gpt4 key购买 nike

我需要管理一个内存堆,这个内存只能被写入,永远不能被读取,即 malloc 实现应该将簿记信息与其管理的堆分开,在普通堆上,并且应该在事实上永远不要触及它管理的特定堆。我希望为此使用经过测试、优化的现成解决方案(如果有的话)。使用示例包括 OpenGL VBO 和嵌入式系统外部单元上的内存。

我看了一眼dlmalloc,从文档来看,它似乎用簿记信息标记了它从两侧分配的内存块。谷歌搜索也没有任何用处——也许我没有合适的关键字来找到我要找的东西。

澄清:作为一个单独的堆,我的意思是我定义为堆。我想在一个或少量预分配 block 中使用少量分配的内存。我什至不关心簿记信息(在这样管理的堆之外)是否大于里面的数据:)此外,应用程序本身将使用股票 malloc 和堆来进行操作,并且只将这些 block 用于特殊目的,这归结为用于与外部硬件对话的内存区域,目的是从应用程序写入,读取是不可能的或昂贵的。这不是一般的 malloc 问题,我只是希望利用已经进行了大量研究和测试的东西。

最佳答案

and should in fact never touch the specific heap it manages.

如果它不管理堆怎么办?请参阅此 malloc 函数,该函数利用既不管理 [heap] 区域(参见 /proc/$$/maps),也不将其元数据存储在可寻址内存中的特定实现,但是,使您的程序独一无二可寻址内存。

void *mymalloc(size_t len){        void *x = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);        return (x == (void *)-1) ? NULL : x;}

现在是 killer 级的启示:glibc 正是使用它来进行足够大的分配。

关于c - 是否有一个 malloc 实现在它自己的堆之外进行簿记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4466817/

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