jjzjj

allocator

全部标签

c++ - 使用不同分配器分配的内存

假设我有一个名为vector的类维护一些类型为T的内部动态数组由std::allocator.分配现在,我构建一个vector类型U,然后想使用移动语义,以便我可以将它消耗的内存用于vector类型T,像这样:vectoru(512);//Dosomethingwithv.vectort=std::move(u);//Dosomethingwitht.//Later,tgetsdestroyed.使用u分配的内存对我来说安全吗?在t中的分配器的移动构造函数,然后使用t释放它的分配器?如果是这样,我必须做些什么来确保这次手术是安全的?我猜我应该先调用allocator.destroy()

c++ - 为什么容器分配器需要指定它们分配的类型?

如果我为容器使用自定义分配器,我不喜欢必须重复包含的类型名:templatestructMyAllocator:publicstd::allocator{//...Usualallocatorimplementation};typedefstd::vector>int_container;typedefstd::vector>int_container_wrong_allocator;根据标准,第二行是未定义的行为,尽管大多数实现会将分配器重新绑定(bind)到正确的类型。我的问题是,既然要求容器和分配器属于同一类型,为什么没有适当的标准机制来强制执行(或完全避免)并消除用户错误的可能

c++ - 毫秒 mpi 错误 : unable to allocate launching block

我使用msmpi在VS2015中创建了简单的控制台程序。#include#include#includeintmain(intargc,char**argv){intrank=0,size=0;MPI_Init(&argc,&argv);/*startsMPI*/MPI_Comm_rank(MPI_COMM_WORLD,&rank);/*getcurrentprocessid*/MPI_Comm_size(MPI_COMM_WORLD,&size);if(rank==0){charhelloStr[]="HelloWorld";//MPI_Send(helloStr,_countof(

c++ - 如何将自定义分配器的完全相同状态传递给多个容器?

我正在编写一个分配器,它引用了某个类的另一个实例,该类跟踪分配的字节数。下面是我正在尝试做的事情的一个最小示例(改编自here),只是没有整个内存跟踪类,而是我引用了一些收集到目前为止分配的字节的int。此引用在main内部分配,应传递给CustomAllocator:#include//numeric_limits#include#include//typeid//container#include#include#includetemplateclassCustomAllocator{public://typedefinitionstypedefTvalue_type;/**Ele

c++ - std::allocate_shared,允许从自定义分配器和单次分配中分配共享指针引用计数

Makeshared使用引用计数和对象的单一分配提高性能,是否可以将自定义分配器与std::allocate_shared一起使用并且仍然有一个分配,根据我写的测试代码它没有发生:sample我知道boost::intrusive,但它有额外的代码需要编写并且可能出错 最佳答案 在一些调试的帮助下发现std::allocate_shared做了预期的事情,它允许你只为你的对象和引用计数器进行一次分配。下面是更正后的代码:allocateshared此处operatornew对std::make_shared和std::allocat

c++ - unordered_map 在 VS10 中抛出 bad_alloc 但在 VS9 中没有,这是一个错误吗?

同时writingapost关于projecteuler's14thproblem我遇到了VC9和VC10之间的行为差​​异。以下代码在VC9中运行正常,但在VC10中std::unordered_map抛出bad_alloc异常。奇怪的是,如果我从异常中恢复过来,future的分配将会成功(容器的大小继续增长)。另外,如果我使用boost::unordered_map,它在两个编译器中都能正常工作。关于实际内存使用情况,我在一台有4GBRAM的机器上运行(正在使用1.7),VC9版本在完成任务之前获得了大约810MB的内存,而VC10版本在大约658MB时崩溃了。这是VC10中的错误

c++ - Visual Studio 2010 C++ : malloc()/HeapAlloc always allocates new page for even smallest alloc size

我有一个相当大的C/C++项目,我一直在试图找出它消耗过多内存的原因(通过任务管理器中的“工作集”判断)。我终于找到了奇怪的行为,即使是最小的malloc()请求,它也会分配一个全新的4k页面。像这样的代码for(intbla=0;bla这应该会增加区区10KB的内存消耗,最终会增加4MB,因为它分配了1000个4kB。真正令人沮丧的部分是我无法将其作为独立文件重现。仅包含上述代码的小型应用程序就可以正常工作。只有大项目才会表现出错误的行为。直接回答一些明显的建议:我正在引入与大项目相同的库,并确保编译标志相同"new"的行为方式相同在Debug和Release模式下都会发生我真的追踪

c++ - 我可以使用 STL 分配器将整个 STL 容器及其内容(键和值)存储在我创建的内存块中吗?

我试图了解我是否可以使用STL分配器(http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759)或任何其他C++机制来达到我的目的。我自己分配了一个很大的内存块。我想创建一个像map这样的STL容器,这样容器,包括存储在容器中的键和值,都存储在这个内存块中。明确地说,当我说“容器,包括键和值”时,我指的是通常由容器内的代码在堆上分配的所有内存位。例如。图形结构,以及键和值的拷贝。map对象本身(不包括上述位)在我的内存块中的存储将由我处理。显然,我找不到其他东西来为我做这件事。我知道有些回复可能是

c++ - 如何使我的 uninitialised_allocator 安全?

来自thisquestion,我想用unitialised_allocator比如说,std::vector避免在构建时对元素进行默认初始化(或resize()的std::vector(有关用例,另请参阅here)。我当前的设计如下所示://basedonadesignbyJaredHoberocktemplatestructuninitialised_allocator:base_allocator::templaterebind::other{//addedbyWalterQ:ISTHISTHECORRECTCONDITION?static_assert(std::is_trivi

c++ - 如何防止在 boost::fast_pool_allocator 管理的对象上调用析构函数?

我想利用boost::fast_pool_allocator的以下广告功能(参见theBoostdocumentationforBoostPool):Forexample,youcouldhaveasituationwhereyouwanttoallocateabunchofsmallobjectsatonepoint,andthenreachapointinyourprogramwherenoneofthemareneededanymore.Usingpoolinterfaces,youcanchoosetoruntheirdestructorsorjustdropthemoffin