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

时间:2014-01-01 01:09:30

标签: c++ c linux memory-management linux-kernel

我编写了一个基本的自定义内存管理分配器,可以获取一块内存,预先创建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()更改上述内容并直接从操作系统获取内存是多么容易/实用?

1 个答案:

答案 0 :(得分:3)

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

如果您想管理自己的内存,请在mmap()上使用/dev/zero获取一个空的内存块。我认为你可以反复这样做以获得新的块。