我编写了一个基本的自定义内存管理分配器,它将抓取一块内存,预创建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()直接从操作系统中获取内存会有多容易/实用?
发布于 2014-01-01 01:19:55
使用brk可能会干扰常规的C/C++内存分配器。即使在代码中不使用常规的new或malloc(),它也可能在库中使用。
如果您想管理自己的内存,请使用mmap() on /dev/zero获得一个空内存块。我想你可以反复这样做才能得到新的区块。
https://stackoverflow.com/questions/20864740
复制相似问题