C++ 使用 brk() 系统调用分配内存的自定义内存管理

C++ Custom memory management using brk() system call to allocate memory?

本文关键字:内存 自定义 管理 分配 系统调用 使用 brk C++      更新时间:2023-10-16

我编写了一个基本的自定义内存管理分配器,它将获取一大块内存,预先创建 X 对象,以便每当我需要"创建"一个对象时,我都可以获取一个预先创建的对象并简单地分配数据成员(内存已经分配)。

我用了placement-new

//Grab a chunk of memory
char* buf = new char [sizeof(X) * num_objs]; 
//Pre-create a lot of objects
for(std::int64_t i=0; i<num_objs; i++){
    char* c = buf + (sizeof(X) * i);
    //This line creates the Order object at location c
    X* x = new(c)X;
}
//Assign data members to objects
for(std::int64_t i=0; i<num_objs; i++){
    char* buf_loc = buf + (sizeof(X) * i); 
    X* my_x = reinterpret_cast <X*> (buf_loc);
    my_x->a = 1;
    my_x->b = 2;
    my_x->c = 3;
    my_x->d = 4;
}

更改上述内容并使用brk()直接从操作系统中获取内存有多容易/实用?

使用 brk 可能会干扰常规的 C/C++ 内存分配器。即使您在代码中不使用常规newmalloc(),也可能在库中使用它。

如果要管理自己的内存,请使用mmap() on /dev/zero 获取空内存块。 我认为您可以反复执行此操作以获得新块。