我应该使用什么 memory/data 结构来将内存划分为 blocks/chunks 及其实现?

What memory/data structure should I use to divide the memory into blocks/chunks and its implementation?

(分配的数据可以是任何类型 - int、char 等。)

我得到了 1024 字节的 sheet 大小和最多 5 sheet 秒。我需要制作某种动态分配的结构(或结构),将所有数据保存在一个地方并将其分成块。所以我基本上需要在一个结构中分配 1024 字节(或者可能是我拥有的所有 space,1024x5 字节)并以不同的方式在块中使用给定的内存。如果 sheet 内存不足,我需要分配一个新内存。

所以我的问题是:对于这项工作,c++ 中最好的结构是什么? 我在想 char* 或 void* 的向量或者 classic c char* 或 void* 数组,但不太确定。如果它是一个数组,我想知道也许我创建一个数组 [5] 并只分配第一个元素,而第一个元素将是指向 1024 字节内存的指针?

以下是将使用该结构完成的功能(它是垃圾收集器的简单实现):

1.Allocate 给定大小的内存块和 return 指向该内存的指针

2.Free 具有“void *region”属性的内存块

3.Increase 给定“void *region”的块大小和大小增加到

4.Decrease 具有给定“void *region”的块的大小和大小减小到

  1. 在文件中写入已分配内存块的信息

注意:所有函数都在 class 垃圾收集器中,并且它们都是 void 类型的静态函数(第一个除外,它是 void* 类型,因为它 returns 是指向新分配块的指针)

注2:页面在机器内存中不是一个接一个分配的,所以它们有不同的地址,它们只在需要的时候分配(当space是运行出)

我会从这样的事情开始:

#include <array>
#include <memory>
#include <iostream>

template<std::size_t N>
struct heap_t
{
public:

    // todo add your memory managment 
    // using templates like 

    template<typename type_t>
    type_t* allocate()
    {
        // use sizeof(type_t) etc...
        return nullptr;
    }

    template<typename type_t>
    void free(type_t* ptr)
    {
        // more logic here.
    }

private:
    std::array<char, N> m_memory{0}; // initialize all memory to 0
};

int main()
{
    constexpr std::size_t heap_size{ 256ul };

    // to avoid allocating heap on the stack use make_unique
    auto heap = std::make_unique<heap_t<heap_size>>();
    
    auto value_ptr = heap->allocate<int>();
    
    return 0;
}