C 中STL地图的自定义分配器
custom allocator for stl map in c++
我想为多件事创建一个自定义分配器,该分配将分配共享内存中的元素。我碰到boost.interprocess,但发现实现实现非常复杂。还有其他解决方法吗?
我不会在这里提供任何实现,而是为您提供一些指示。如果您的共享内存抽象或区域,例如从adress void* shmemaddr开始,如果您决定使用共享内存的stl容器,需要做的是使容器分配内存,从Shmemaddr开始,然后再进一步,直到可以在共享池中分配内存为止。您可以使用任何分配策略,例如使用Malloc或New Spemeent实施该策略。此外,要使您的容器使用您的分配器,您需要提供分配器作为模板参数,对于Multimap,它将是Multimap :: Allocator_Type类alloc =分配器>作为第四个模板参数,在较少的比较函数之后,例如,如果将存储在多胶合对中,请兼作键,键,价值对,则可能是这样的东西
multimap<int,double,less<int>,CustomAlloc<pair<int,double>>>
现在,您的自定义分配器需要满足封装特定Lowlevel内存管理的分配概念,尤其是如果共享内存是要分配的资源,则需要在多线程的环境中安排正确的内存分配。这意味着,首先,您需要一些结构才能证明使用的记忆。例如,它可能是一些链接的数据结构,类似的实现非常普遍,因此您需要保持该结构的不变性一致。这意味着,如果您需要在succesfull分配或交易分配或交易之后需要更新您的书本保存结构,则需要进行原子化,因此,线程可能会尝试分配内存的内存,请参阅CustomAllocator分配作业之前的状态中的结构开始或分配工作完成后。例如,您的首选可能是使用Mutex保护数据,避免比赛并保持不变性。这只是方向,考虑到自己的分配者并不是很难,我希望这将有所帮助。
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- C++自定义分配器大小参数作为模板参数会引发编译器错误
- c++ 中的自定义分配器,用于不调用secure_string实现
- 我可以对 std::array 使用自定义分配器来获取安全加密密钥吗?
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 自定义分配器,包括放置新案例
- 对 std::regex_match 使用自定义分配器
- 为什么我的代码不适用于自定义分配器?
- 为什么这个自定义分配器的析构函数在 GCC/MSVS 的 stdlib 中被调用两次
- std::cout 如果从自定义分配器 (Visual Studio 2019) 调用,则不会输出
- 通过自定义分配器和删除器有效使用shared_ptr
- 如何将带有自定义分配器的 std::vector 传递给期望带有 std::分配器的函数?
- 自定义分配器兼容性
- 使用自定义分配器及其替代项重载基本类型
- C 中STL地图的自定义分配器
- 带有 clang++ v4 和 gcc 6.3 库的自定义分配器
- 不调用带有 std::vector 的自定义分配器
- 何时使用自定义分配器
- 为什么当我使用自定义分配器溢出向量时没有出现分段错误?
- 如何将自定义分配器的完全相同状态传递给多个容器?