草庐IT

Allocator

全部标签

C++ 分配器,特别是将构造函数参数传递给使用 boost::interprocess::cached_adaptive_pool 分配的对象

这是一个令人尴尬的问题,但即使boost.interprocess提供的编写良好的文档也不足以让我弄清楚如何做到这一点。我有一个cached_adaptive_pool分配器实例,我想用它来构造一个对象,传递构造函数参数:structTest{Test(floatargument,boolflag);Test();};//NormalconstructionTestobj(10,true);//NormaldynamicallocationTest*obj2=newTest(20,false);typedefmanaged_unique_ptr::typeunique_ptr;//Dy

c++ - 为什么 `std::pmr::polymorphic_allocator` 不会在容器移动时传播?

来自http://en.cppreference.com/w/cpp/memory/polymorphic_allocator:polymorphic_allocatordoesnotpropagateoncontainercopyassignment,moveassignment,orswap.Asaresult,moveassignmentofapolymorphic_allocator-usingcontainercanthrow,andswappingtwopolymorphic_allocator-usingcontainerswhoseallocatorsdonotcomp

c++ - std::vector 是否满足 Boost.Interprocess 分配器的容器要求?

在boost::interprocess文档中,它被认为是容器存储在共享内存中的要求:STL容器可能不会假设用分配器分配的内存可以用相同类型的其他分配器释放。仅当分配给一个对象的内存可以与另一个分配时,所有分配器对象必须比较相等,并且这只能在运行时使用operator==()进行测试。容器的内部指针应该是allocator::pointer类型,并且容器不能假定allocator::pointer是原始指针。所有对象都必须通过allocator::construct和allocator::destroy函数构造-销毁。我正在使用带有-std=c++11(和boost1.53)的gcc4

c++ - 几个小 std::vectors 的连续内存分配?

我想找到一种方法来在连续的内存中存储多个std::vectors,每个不同但已知且相当小的大小。我意识到我可以编写自己的类,比如使用一个非常大的数组,并在更大的数组中将指针指向数组的每个子部分的开头,将其视为一个单独的实体,但似乎应该有一种更聪明的方法来做到这一点.有没有办法使用分配器,例如,创建连续的std::vectors?我不想重新发明轮子只是因为我想要这个正常的std::vectors的内存位置我什至不知道如何开始编码。我需要创建一个分配器,它接受一个指向内存的指针,在那里分配一个vector,然后以某种方式传回该vector末尾的地址,因此下一个std::vector的分配器

c++ - 对标准库分配器指针类型的要求

我正在尝试编写一个四叉树稀疏矩阵类。简而言之,一个quadtree_matrix是零矩阵或四元组(ne,nw,se,sw)的quadtree_matrix.我最终想测试不同的分配方案,因为这可能会影响线性代数运算的性能。所以我也会模板quadtree_matrix在标准分配器类型上,以便我可以重用现有的分配器。我将不得不分配两种不同类型的数据:T,或node,其中包含四个指针(指向T或节点)。对于我将考虑的所有算法,我肯定知道期望什么样的数据,因为我知道在算法的任何一点我所面对的子矩阵的大小是多少(我什至不需要存储这些大小)。我当然会使用两个不同的分配器:这没关系,因为分配器类型提供了

c++ - 禁止精度损失的整数转换

如何防止这样的代码被编译?#include#include#include#includeintmain(){std::vectorv;v.emplace_back(std::numeric_limits::max());std::coutg++和clang-std=c++14-Wall-Wextra-Werror-pedantic-Wold-style-cast-Wconversion-Wsign-conversion甚至不要警告它。该示例还编译时没有警告std::vector 最佳答案 将-Wsystem-headers添加到命

c++ - std::list 如何分配节点与元素

std::list如何分配它保留next/prev指针和T它包含的元素?我认为标准分配器只能用于为一种类型分配内存(因为std::allocator::allocate以sizeof(T)为增量分配内存).因此,在一次分配中分配列表节点和包含的对象似乎是不可能的,这意味着必须根据实现决定分配节点,并且节点存储指向对象的指针而不是对象本身,这意味着从指向列表节点的指针到它包含的对象的两个间接级别,这似乎效率低下。是这样吗? 最佳答案 分配器有一个成员模板类rebind,负责分配其他类型。std::allocator的页面here实际上

c++ - 如何实现仅在堆栈上分配的字符串

在大约十年前的一个项目中,我们发现std::vector的动态分配导致严重的性能消耗。在这种情况下,它分配了许多小vector,所以快速的解决方案是编写一个类似vector的类来包装一个基于堆栈的预分配char用作其容量的原始存储的数组。结果是static_vector.如果你知道一些基础知识,这样的东西很容易写,你可以找到quiteafew这样的野兽ontheweb.事实上,boosthasone,现在也是。现在在嵌入式平台上工作,我们恰好需要一个static_basic_string.那将是一个字符串,它在堆栈上预先分配了固定的最大内存量并将其用作其容量。起初我认为这应该相当容易(

c++ - 为什么 propagate_on_XXX_assignment 不适用于构造函数?

C++11std::allocator_traits模板用于查询Allocator确定是否propagate_on_copy_assignment和propagate_on_move_assignment是true.这些值会影响容器类型必须如何实现复制和移动分配。如果std::allocator_traits::propagate_on_move_assignment==true然后容器移动赋值运算符必须使用RHS容器对象中包含的分配器移动分配其内部分配器对象。据推测,重点是我们可以实现Allocator可以通知客户端Container是否为move的类型或copy操作应该要求我们复制

c++ - 如何将字符串对添加到 rapidjson 文档中

我想使用rapidjson创建一个json字符串。但是我得到一个错误:无法将std::string转换为rapidjson::Type。intx=111;stringclassName="myclass";Documentdoc;auto&allocator=doc.GetAllocator();doc.AddMember("x",Value().SetInt(x),allocator);doc.AddMember("className",className,allocator);unordered_map&map=sprite->toMap();for(constauto&pair: