草庐IT

alloc_bootmem

全部标签

c++ - 为什么 allocate_shared 和 make_shared 这么慢

我刚刚编写了一个测试程序来找到分配和释放许多由shared_ptr管理的对象的最快方法。我尝试了shared_ptr和new,shared_ptr和pool,make_shared,allocate_shared。让我惊讶的是allocate_shared比shared_ptr和pool慢。我使用发布版本测试vs2017+win10中的代码。发布build设置为默认(/O2)。我还在gcc4.8.5+centos6.2中使用g++-std=c++11-O3对其进行了测试。代码是:#include#include#include#include#include#includeusingn

c++ - Boost 池分配器不会在 g++ 中使用 std::allocate_shared 进行编译

编辑:澄清我想要的结果,因为我没有很好地传达它:能够将std::allocate_shared与boost::fast_pool_allocator一起用作使用g++4.8或更高版本和boost1.56.0的分配方法。目前这适用于g++4.6,但在4.7、4.8和4.9上失败。需要说明的是,我不希望在g++4.7中使用这项功能。测试代码产生错误:#include"boost/pool/pool.hpp"#include"boost/pool/pool_alloc.hpp"#includeintmain(intargc,char**argv){autofails=std::allocat

c++ - 什么是 "allocation context"?

我是一名学生,我必须进行有关内存泄漏检测的研究。在许多论文中,他们都在谈论分配背景。我不知道这是什么意思。我找不到任何allocationcontext的定义(或翻译,我来自德国)。举个例子,引用一篇论文(DetectingMemoryLeaksthroughIntrospectiveDynamic使用机器学习的行为建模):Thekeyideabehindusingmachinelearningisthataleakingobjectisdiscerniblebyobservingthelifetimesofothersimilarobjects.Thatis,anobjectcanb

c++ - "single allocation"对 boost::make_shared 意味着什么

在make_shared的boost文档中,它说:Besidesconvenienceandstyle,suchafunctionisalsoexceptionsafeandconsiderablyfasterbecauseitcanuseasingleallocationforboththeobjectanditscorrespondingcontrolblock,eliminatingasignificantportionofshared_ptr'sconstructionoverhead.我不明白“单一分配”的意思,是什么意思? 最佳答案

c++ - 为什么 `polymorphic_allocator` 采用 `memory_resource` 指针而不是引用?

C++17标准说:[mem.poly.allocator.ctor]polymorphic_allocator(memory_resource*r);Requires:risnon-null.Effects:Setsmemory_­rsrctor.Throws:Nothing.[ Note:Thisconstructorprovidesanimplicitconversionfrommemory_­resource*.— endnote ]接受memory_resource*有什么意义?而不是memory_resource&如果“需要”子句提到r必须是非空的?Bloomberg¹风格指

c++ - 使用 Howard Hinnant 的 short_alloc 进行快速 move 分配

我正在使用HowardHinnant的漂亮的基于竞技场的小分配器,short_alloc.令我震惊的是,从vector进行的move分配可以使用通常的快速move分配(即获取目标的资源)来完成,该vector已经超出其arena,因此分配在堆上。然而,事实并非如此:typedefarenaarena_type;typedefshort_allocalloc_type;typedefstd::vectorvec_type;arena_typearena1,arena2;vec_typevec1(alloc_type(arena1)),vec2(alloc_type(arena2));ve

c++ - 多继承类自定义内存alloc和dealloc

我想在我的项目中进行内存管理。我不想要operatorglobalnew/delete所以我实现了一个简单的内存分配器。这是我的代码:classIAllocator{public:void*Alloc(unsignedintsize){1.allocmemory.2.tracealloc.}voidDealloc(void*ptr){1.freememory.2.erasetraceinfo.}templatevoidDestructor(T*ptr){if(ptr)ptr->~T();}};//macroforuseeasy.#defineMYNEW(T)new(g_Allocato

c++ - 容器优化:为什么 STL 容器方法参数不再使用 allocator::const_reference typedef?

阅读之前:const_reference是typedef,不需要是constT&正如您在std::vector::const_reference=bool中看到的那样.请在阅读其余部分时牢记这一点以正确理解它(正如评论中所建议的那样,这对很多人来说很难)。我想为简单类型(例如int)使用STL容器,但发现它们使用了次优的constT&“反模式”-它适用于大类,但在未内联时对于简单/基本类型不是最优的-考虑嵌入式系统,例如在ARM/ATSAM4L上,带有实例化。问题是:为什么例如vector::push_back使用(constvalue_type&)的参数重新设计而不是自C++11以来

c++ - 堆栈溢出 : Duplicate temporary allocation in stack space?

structMemBlock{charmem[1024];MemBlockoperator*(constMemBlock&b)const{returnMemBlock();}}global;voidfoo(intstep=0){if(step==10000){global=global*MemBlock();}elsefoo(step+1);}intmain(){foo();return0;}ProgramreceivedsignalSIGSEGV,Segmentationfault.0x08048510infoo(step=4000)att.cpp:1212voidfoo(intst

c++ - 仅使用 600 MB 内存时调整 QByteArray 的大小会抛出 std::bad_alloc

我是Qt的新手,需要加载和处理一些大文件。相反,我的内存不足。以下代码说明了我的问题:QByteArraymem;for(inti=1;i当它达到600MB时,我得到std::bad_alloc。那真的不应该发生。是否有增加堆大小的secret开关?我在Windows上使用Qt5.0.2和VisualC++10.0x86编译器。 最佳答案 AFAIKQByteArray分配一个连续的内存块。虽然您的应用程序可能仍有大量可用虚拟内存,但很有可能您的数组分配到的当前内存块无法进一步扩展,因为您的内存管理器没有足够大的连续block。如果