allocator相关内容
发件人https://en.cppreference.com/w/cpp/memory/shared_ptr/allocate_shared: template shared_ptr allocate_shared( const Alloc& alloc, Args&&... args ); 存储空间通常
..
新的 C++11 标准需要 STL 实现来支持容器中的有状态分配器.现在主要的 STL 实现(Visual Studio 2008、2010、libstdc++)是否符合这个要求?我在 MSDN 或 libstdc++ 文档中一无所获. 解决方案 看起来 STL 容器中的状态分配器功能已经得到广泛支持.在大多数情况下,分配器的状态性不会造成麻烦.尚未得到广泛支持的是新标准处理问题情况的方式
..
使用不匹配的 std::allocator 特化(当然,除了 void 的特化)作为 STL 容器的模板参数(不是全部)在技术上是否有效,但在下面列举加上 unordered_(multi)map/set)?以下代码编译正常. #include #include #include #include #include 主函数(){str
..
为 STL 容器(例如 std::vector)提供分配器作为模板参数有什么区别,例如: std::vector>一些整数; 并提供一个分配器作为构造函数参数,例如: std::allocator温度;std::vector一些整数(临时); 考虑到它们不是同一个东西(即一个提供一个类型,另一个提供一个类型实例)并且可以彼此分开使用,那么它们的优点是什么? 解决方案 可以
..
8 年前,Stephen Lavavej 发表了这篇博文,其中包含简单的分配器实现,命名为“Mallocator".从那时起,我们已经过渡到 C++11(以及很快的 C++17)时代......新的语言特性和规则是否会影响 Mallocator,还是仍然相关? 解决方案 STL 自己在他的 STL 中有这个问题的答案特性和实现技术在 CppCon 2014 上的演讲(开始于 26'30).
..
..
根据这个问题,我想使用一个 unitialised_allocator ,例如 std::vector 以避免在构造时默认初始化元素(或 std 的 resize()::vector(另见 这里是一个用例).我目前的设计是这样的: //基于 Jared Hoberock 的设计模板struct uninitialised_allocator : base_allocator::template
..
在 C++11 标准中,我们在动态内存管理库中有 std::scoped_allocator_adaptor.这个类最重要的用例是什么? 解决方案 如果你想要一个字符串容器,并且想要对容器及其元素使用相同的分配器(因此它们都被分配在同一个区域中,如 TemplateRex描述)然后您可以手动执行此操作: template使用分配器 = SomeFancyAllocator;使用 S
..
我有两个问题: 1) 是否可以实现一个使用 alloca 在堆栈上分配内存并且符合 C++ STL 的分配器? 如果那里有代码,您只需将我指向 URL 即可让我开心.:-)如果没有代码,也许你可以画出函数分配和解除分配? 2) 如果上述问题的答案是“是",我想了解如何在堆栈上为类成员分配内存.例如,考虑一个 std::vector> 并假设调用此向量的成员函数“resize"
..
我是 C++ 新手,我在我的项目中使用矢量类.我发现它非常有用,因为我可以拥有一个在必要时自动重新分配的数组(即,如果我想 push_back 一个项目并且向量已经达到它的最大容量,它会重新分配自己,向操作系统请求更多内存空间),所以访问向量的元素非常快(它不像列表,要到达“n-th"元素,我必须经过“n"个第一个元素). 我发现 这个问题 非常有用,因为他们的答案解释了当我想将向量存储在堆
..
据我所知,与 STL 一起使用的分配器的要求容器在 C++11 标准第 17.6.3.5 节的表 28 中列出. 我对其中一些要求之间的相互作用有些困惑.给定类型 X 是类型 T 的分配器,类型 Y 是“类型U、实例a、a1和a2的相应分配器类"X,以及一个Y的实例b,表格中写着: 表达式 a1 == a2 仅在分配了存储空间时计算为 truea1 可以被 a2 释放,反之亦然.
..
我想知道有一个符合 C++ 标准库的 allocator 是否可行,它使用位于堆栈中的(固定大小的)缓冲区. 不知何故,这个问题似乎还没有在 SO 上被这样问过,尽管它可能已经在别处隐含地回答了. 所以基本上,就我的搜索而言,似乎应该可以创建一个使用固定大小缓冲区的分配器.现在,乍一看,这应该意味着它应该也可以有一个使用固定大小缓冲区的分配器,该缓冲区“存在于"堆栈中,但它确实出现,周
..
是否可以使自定义结构的 std::vector 分配对齐的内存以使用 SIMD 指令进行进一步处理?如果可以使用 Allocator,有没有人碰巧有这样一个他可以共享的分配器? 解决方案 从 C++17 开始,只需使用 std::vector 或任何其他对齐类型.operator new 有对齐版本,它被 std::allocator 用于对齐类型(以及普通的 new 表达式,所以new
..
放弃 std::allocator 而支持自定义解决方案的真正好理由是什么?您是否遇到过对正确性、性能、可扩展性等绝对必要的情况?有什么非常聪明的例子吗? 自定义分配器一直是我不太需要的标准库功能.我只是想知道 SO 上是否有人可以提供一些令人信服的例子来证明它们的存在是合理的. 解决方案 正如我所提到的 在这里,我已经看到英特尔 TBB 的自定义 STL 分配器通过更改单个 显着
..
我有一个带有 boost::interprocess 容器的容器 类型.但是我喜欢在我的进程内存中使用这个类也是一个普通的类.有人可以帮我编写一个不带参数的构造函数,以便在我当前的进程内存中初始化该类. #include #include #include #include #include #include #include /* 兰特,兰特 */#include /* 时间 */使用命名空间
..
我喜欢创建一个包含进程间容器的类的 boost 进程间向量.以下代码在调整大小函数调用之前有效,当然因为我的类没有默认构造函数.我该如何解决这个问题?该示例基于 boost 容器的容器 示例 谢谢马库斯 #include #include #include #include #include 使用命名空间 boost::interprocess;//分配器和容器的类型定义typedef m
..
我是 C++ 的新手,我在我的项目中使用了 vector 类.我发现它非常有用,因为我可以有一个在需要时自动重新分配的数组(即,如果我想 push_back 一个项目并且向量已经达到它的最大容量,它会重新分配自己向操作系统请求更多的内存空间),所以访问向量的元素非常快(它不像列表,要到达“第 n"个元素,我必须通过“n"个第一个元素). 我发现这个问题非常有用,因为他们的回答解释了当我想将向
..
如果我想用 SSE 处理 std::vector 中的数据,我需要 16 字节对齐.我怎样才能做到这一点?我需要编写自己的分配器吗?或者默认分配器是否已经与 16 字节边界对齐? 解决方案 C++ 标准需要分配函数(malloc() 和 operator new())来适当地分配内存对齐任何标准类型.由于这些函数不接收对齐要求作为参数,实际上这意味着所有分配的对齐方式是相同的,并且是具有最
..
A 不同的问题激发了以下想法: std::vector 是否必须在增加容量时移动所有元素? 据我所知,标准行为是底层分配器请求整个新大小的块,然后移动所有旧元素,然后销毁旧元素,然后释放旧内存. 鉴于标准分配器接口,这种行为似乎是唯一可能的正确解决方案.但我想知道,修改分配器以提供一个 reallocate(std::size_t) 函数是否有意义,该函数将返回一个 pair 并
..
每个分配器类都必须有一个类似于以下的接口: template类分配器{...模板struct rebind { typedef allocator其他;};}; 使用分配器的类做了一些像这样多余的事情: template>类向量 { ... }; 但为什么需要这样做? 换句话说,他们不能说: template类分配器 { ... };模板类 Alloc = std::
..