首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++自定义内存管理使用brk()系统调用分配内存?

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

Stack Overflow用户
提问于 2014-01-01 01:09:29
回答 1查看 849关注 0票数 1

我编写了一个基本的自定义内存管理分配器,它将抓取一块内存,预创建X对象,这样每当我需要“创建”一个对象时,我就可以抓取其中一个预创建的对象,并简单地分配数据成员(内存已经被分配)。

我用了placement-new

代码语言:javascript
复制
//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()直接从操作系统中获取内存会有多容易/实用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-01 01:19:55

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

如果您想管理自己的内存,请使用mmap() on /dev/zero获得一个空内存块。我想你可以反复这样做才能得到新的区块。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20864740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档