Malloc内存检查是否连续

时间:2019-01-16 05:55:25

标签: c++ c malloc dynamic-memory-allocation allocator

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

static_cast<desired_type*>(buffer_pointer + N)

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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