gpt4 book ai didi

c++ - malloc内存检查是否连续

转载 作者:行者123 更新时间:2023-11-30 16:22:55 24 4
gpt4 key购买 nike

我正在实现一个内存池类型的类。其中一种方法分配 B 字节内存并返回一个指向它的 void 指针,同时在内部处理缓冲区并移动较旧的内存,以确保对象在其生命周期内管理的所有内存都是连续的(类似于 std::vector 的方式)一个预先分配的缓冲区,并在缓冲区用完后分配额外的空间,将信息从旧缓冲区复制到新缓冲区,以确保所有内存都是连续的)。我的问题是,如何确保或检查所有分配的内存是连续的?如果我想手动从一个对象跳转到另一个对象,请使用

static_cast<desired_type*>(buffer_pointer + N)

如果对象的位置偏移一定量,而不仅仅是先前对象大小的总和,则此方法自然会失败。我是编写自定义内存池的新手,所以我只是想知道,如何确保分配的内存不分段,或者访问新片段的位置,以便我仍然可以通过 malloc()-ed block 手动索引内存?谢谢。

最佳答案

如果我理解你的问题,你是在问是否可以多次调用 malloc 返回连续内存。

答案是否定的,内存在多个 malloc 之间不会是连续的,因为大多数内存管理器会将头/尾数据放在分配的内存周围以进行自己的管理,并在边缘周围放置保护标记以检测溢出 - 详细信息是严重依赖于实现。

对于您自己的内存管理,您需要使用 malloc 分配足够大的 block ,然后将其拆分并自己管理内部。

您可以查看此 github 项目作为所需管理的示例: https://github.com/bcorriveau/memblock

关于c++ - malloc内存检查是否连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54211148/

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