7得票1回答
如何让forward_list、set、list等调用std::allocator?

我注意到分配器只能分配类型为T的对象并保留大小为n * sizeof(T)的内存块。然而,在std::list<T>类型中的链表节点不一定是T类型的对象,也不一定与T对象具有相同的大小。在这种情况下,std::list如何使用std::allocator来分配内存?

59得票4回答
使std::vector分配对齐内存

是否可以使自定义结构体的std::vector分配对齐内存,以便使用SIMD指令进行进一步处理?如果可以使用Allocator来实现,是否有人能够分享这样的allocator?

8得票2回答
一个allocator.construct循环是否等同于std::uninitialized_copy?

在这种情况下,T是某种类型,allocator是该类型的分配器对象。默认情况下,它是std::allocator<T>,但并不一定如此。 我使用allocator.allocate(n)获取了一块内存。我还有一个T对象的容器con(比如说,一个std::vector<T&g...

7得票3回答
C++中的分配器使用(STL树)

我最近一直在尝试理解C++分配器的工作原理,查看STL库用于std::set或std::map等的红黑树实现,但有些事情让我无法理解。 首先,它使用重新绑定模板将分配器从容器需要存储的类型_Val转换为树使用的节点类型_Rb_tree_node<_Val>: typedef t...

7得票5回答
为什么删除的内存无法被重复使用

我正在使用MSVC 9.0在Windows 7上进行C++开发,同时也在Windows XP SP3上测试和复现了该问题。当我分配1GB的0.5MB大小的对象时,删除它们后一切正常且表现符合预期。但是,如果我分配1GB的0.25MB大小的对象并删除它们,内存仍被保留(在Address Spac...

35得票1回答
Hinnant的堆栈分配器相关问题

我一直在使用Howard Hinnant的堆栈分配器,它非常好用,但是其中的一些实现细节对我来说有点不清楚。 为什么要使用全局操作符new和delete?allocate()和deallocate()成员函数分别使用::operator new和::operator delete。类似地,...

7得票1回答
C++:无法使用scoped_allocator_adaptor传播polymorphic_allocator

我有一个名为vector<vector<int>>的变量,想要整个内存(即外层和内层vector)都来自于memory_resource。这是一个简化示例,首先是无聊的部分: #include <boost/container/pmr/memory_resour...

9得票1回答
std::map标准分配器与块分配器的性能比较

我在一本C++优化手册上读到,STL容器(如std::list、std::set、std::multi_set、std::map和std::multi_map)的标准分配器可以被更高效的块分配器替代。 块分配器具有更高的性能、低的碎片化和高效的数据缓存。 我在网上找到了FSBAllocat...

36得票2回答
std::scoped_allocator_adaptor的目的是什么?

在C++11标准中,动态内存管理库中有一个名为std::scoped_allocator_adaptor的类。这个类最重要的用途是什么?

12得票2回答
unordered_set可以使用不同的分配器为节点和桶列表分别分配内存吗?

我想使用带有std::pmr::monotonic_buffer_resource的std::pmr::unordered_map。这两者很搭配,因为该集合的节点是稳定的,所以不需要通过重新分配来创建大量的缓冲区空洞: std::pmr::monotonic_buffer_resource...