31得票1回答
`memory_resource` 的目的和用途是什么?

标准的C++17新增了一个名为pmr的命名空间,其中包含一组以memory_resource名称分组的类。在互联网上搜索后,我发现关于它的通俗易懂的信息很少,这就是这个问题产生的直接原因: pmr及特别是pmr::memory_resource的主要思想是什么? 更具体地说,我心中有一些疑...

8得票1回答
C++0x分配器

我注意到我的MSVC10副本带有容器,看起来允许基于状态的分配器,并编写了一个简单的池分配器,为特定类型分配池。 然而,我发现如果_ITERATOR_DEBUG_LEVEL != 0,MSVC vector会从传递的分配器创建代理分配器(用于迭代器跟踪?),使用代理分配器,然后让代理分配器超出...

11得票2回答
有没有一种C++分配器可以遵守重写的new/delete?

我正在为类型为T的数组实现资源分配克隆操作。直接的实现使用new T[sz],然后在新数组中使用std::copy从源中复制。它会两次遍历内存。 出于性能原因,我想先分配原始内存,然后使用std::uninitialized_copy,这样只需一次遍历内存。当使用自定义分配器(Allocat...

59得票3回答
std::vector在增加容量时是否必须移动对象?或者,分配器是否可以“重新分配”?

一个不同的问题启发了以下想法: 当 std::vector<T> 增加其容量时,是否必须移动所有元素? 据我所知,标准行为是底层分配器请求一个新大小的整个块,然后将所有旧元素移动过去,然后销毁旧元素,最后释放旧内存。 在标准分配器界面给出的情况下,这种行为似乎是唯一可能的正确...

10得票2回答
为什么std::vector::get_allocator()返回值类型是by-value?

令我惊讶的是,当我尝试使用不可复制的分配器时,使用 std::vector::get_allocator() 时出现了错误。为什么 std::vector::get_allocator() 返回值而不是引用? template<typename T> class nc_alloc...

14得票2回答
STL容器:构造函数的分配器参数和作用域分配器

STL容器有一个模板参数,可以选择自定义分配器。花了一些时间,但我认为我理解了其工作原理。不过这样做并不是很好,因为给定的分配器类型并没有直接使用,而是重新绑定到另一种类型的分配器上。最终我可以使用它。 在阅读API后,我发现还可以将分配器作为构造函数参数传递。但是,如果容器内部重新绑定了来...

35得票2回答
C++ STL分配器与new操作符的比较

根据C++ Primer第四版第755页的注释: 现代C++程序通常应该使用allocator类来分配内存。这样更安全,更灵活。 我不太理解这个说法。到目前为止,我阅读的所有材料都教授使用new在C++中分配内存。书中展示了vector类如何利用allocator的示例。但是,我想不出其他...

8得票3回答
标准库分配器指针类型的要求

我正在尝试编写一个四叉树稀疏矩阵类。简而言之,quadtree_matrix<T> 要么是零矩阵,要么是四元组 (ne, nw, se, sw) 的 quadtree_matrix<T>。 我希望最终测试不同的分配方案,因为这可能会影响线性代数运算的性能。因此,我还将...

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

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

9得票4回答
自定义分配器的性能

我正在构建一个AVL树类,它将有一个固定的最大项目数。因此,我想,与其逐个分配每个项目,不如一次性分配整个块,并使用位图在需要时分配新内存。 我的分配/释放代码: avltree::avltree(UINT64 numitems) { root = NULL; if (!numi...