C++ 使用 brk() 系统调用分配内存的自定义内存管理
C++ Custom memory management using brk() system call to allocate memory?
我编写了一个基本的自定义内存管理分配器,它将获取一大块内存,预先创建 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++ 内存分配器。即使您在代码中不使用常规new
或malloc()
,也可能在库中使用它。
如果要管理自己的内存,请使用mmap()
on /dev/zero
获取空内存块。 我认为您可以反复执行此操作以获得新块。
相关文章:
- 使用模板类的自定义列表类型中的内存泄漏
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 自己的自定义向量类. 内存重新分配
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 结构向量中自定义结构函数的内存使用
- 适用于 std::unique_ptr 的内存高效自定义删除器?
- 为什么要对堆栈中的内存使用自定义动态内存分配?
- 如何专用/分配自定义内存位置,以便可以在C 中编辑该位置
- 自定义内存分配器示例(需要一些说明)
- std::vector 如何支持未知大小的自定义对象的连续内存
- C 发布的矢量包含自定义类的内存
- 跨共享/静态库集成C++自定义内存分配器
- 如何在 C++ 中安全地为 char *array 重新分配内存(它适用于自定义字符串类)
- 自定义链表C++中的内存泄漏
- 如何将sf::Font复制到自定义池分配的内存中
- 带有realloc的自定义池内存分配器
- 如何为共享内存转发声明自定义unique_ptr
- 自定义内存分配和多个继承类的解除分配