jjzjj

allocator

全部标签

c++ - C++ 中的分配器用法(STL 树)

我最近一直在尝试了解C++分配器的工作原理,并且一直在寻找STL库用于类似std::set之类的红黑树的实现。或std::map,但有些事情我无法理解。首先要做的是从容器必须存储的类型转换分配器-_Val-树使用的节点类型-_Rb_tree_node-使用重新绑定(bind)模板:typedeftypename__gnu_cxx::__alloc_traits::templaterebind>::other_Node_allocator;typedef__gnu_cxx::__alloc_traits_Alloc_traits;这个我可以解决。现在,当一个元素被插入并且它需要创建一个新

c++ - std::allocator<T>::deallocate 的第二个参数的目的是什么?

Inhere是释放内存的声明。分配器类。我的问题是这个声明中的第二个参数是什么?如果此函数调用operatordelete(_Ptr),则此参数未被使用,那么它在那里有什么用?谢谢。摘自MSDN:从指定位置开始的存储中释放指定数量的对象。voiddeallocate(pointer_Ptr,size_type_Count);参数_Ptr指向要从存储中释放的第一个对象的指针。_计数要从存储中释放的对象数。 最佳答案 当您调用deallocate时,您必须给它一个您之前通过调用allocate获得的指针以及您传递给allocate的大小

c++ - 替换标准 C++ 分配器?

我想用更健壮的分配器替换标准分配器(C++标准只需要对vector::resize进行溢出检查)。许多库提供的各种C++分配器在进行负面self测试时会一败涂地。我可以使用更强大的分配器。ESAPI的分配器不仅检查溢出,它还有调试仪器来帮助发现错误。http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/esapi/util/zAllocator.h.是否有一种标准方法可以轻松替换程序中使用的C++分配器?我还想确保它在库代码中被替换,我可能无法访问源代码。 最佳答案

c++ - std::tr1::shared_ptr 是否会抛出 bad_alloc 并且在 try/catch block 中是个好主意?

我实际上正在制作一个简单的C++SFML游戏,我想学习更多关于C++编程的知识。现在我正在使用shared_ptr来管理资源。创建新资源时,我对shared_ptrs有一些疑问,例如:shared_ptrresource(newResource(World::LEVEL));根据boostshared_ptr(Y*p)throwsbad_alloc。我不知道std::tr1是否也这样做。而且我不知道我是否应该担心将shared_ptr放入try/catchblock中以检查是否抛出bad_alloc。这是一个好的编程习惯吗? 最佳答案

c++ - 线程构造的性能成本 : missed optimisations and memory allocation

我们遇到了一种奇怪的现象,其中包含头文件会导致某些内存分配密集型工作负载的性能下降5-10%。这个头文件将一个线程池声明为一个全局变量。该线程池从未在应用程序中以任何容量(还)使用过。也就是说,除了在程序启动时创建这个静态线程池外,应用程序完全是单线程的。一旦标题被移除,性能损失就会消失。从一些研究来看,由于某些编译器优化不再可能,多线程应用程序似乎会导致一些性能损失。每当以任何形式或容量实例化与线程相关的构造时,是否有可能关闭此类优化?或者,由于在执行大量内存分配时性能损失似乎最为明显,编译器是否有可能在编译/链接阶段意识到线程构造已实例化,因此它切换到线程安全内存分配器?这发生在L

c++ - rapidjson 正确的 json 创建

我正在尝试使用rapidjson创建一个json,但在生成正确的输出时遇到了一些意想不到的问题。我正在创建和填充这样的文档:Documentd;d.SetObject();rapidjson::Document::AllocatorType&allocator=d.GetAllocator();size_tsz=allocator.Size();d.AddMember("version",1,allocator);d.AddMember("testId",2,allocator);d.AddMember("group",3,allocator);d.AddMember("order",

c++ - 为什么我会收到 CL_MEM_OBJECT_ALLOCATION_FAILURE?

我在GPU上分配一个cl_mem缓冲区并对其进行处理,在超过一定尺寸之前效果很好。在那种情况下,分配本身会成功,但执行或复制不会。我确实想使用设备的内存来加快操作速度,所以我分配如下:buf=clCreateBuffer(cxGPUContext,CL_MEM_WRITE_ONLY,buf_size,NULL,&ciErrNum);现在我不明白的是大小限制。我正在复制大约16MB,但应该可以使用大约128MB(参见CL_DEVICE_MAX_MEM_ALLOC_SIZE)。为什么这些数字相差如此之大?这是oclDeviceQuery的一些摘录:CL_PLATFORM_NAME:NVID

c++ - 无法重载现有的 std::vector 函数

我正在做一个POC实现,根据要求,我需要扩展std::vectorinsertAPI,它只需要一个参数(要插入的值),并且代码会在内部添加这个容器的末端。我创建了一个派生自std::vector的自定义类(ValVector),并定义了一个接受单个参数但在编译时接受的自定义InsertAPI抛出错误。下面是带有错误信息的代码片段:#include#includeusingnamespacestd;typedefboolBOOL;template>classValVector:publicstd::vector{public:BOOLinsert(constT&elem){return(

c++ - 函数不会抛出 bad_alloc 异常

我正在尝试从Stroustrup的C++PL4书中做一个练习。任务是:Allocatesomuchmemoryusingnewthatbad_allocisthrown.Reporthowmuchmemorywasallocatedandhowmuchtimeittook.Dothistwice:oncenotwritingtotheallocatedmemoryandoncewritingtoeachelement.以下代码不会抛出std::bad_alloc异常。执行程序后,我在终端中收到消息“Killed”。还有。以下代码在~4秒后退出。但是当我取消注释内存使用消息时//++i;

c++ - 如何创建 C++ 11 非默认可构造分配器?

这个主题出现在这个线程中,关于VisualStudio2015的std::list::sort()的变化:`std::list::sort()`-whythesuddenswitchtotop-downstrategy?新版本的std::list::sort不需要默认可构造的std::list,因为它只使用迭代器,并且不创建任何本地列表,所以列表是否可以并不重要'不是默认构造的。之前的版本使用本地列表(注意-列表的每个实例都涉及一个哨兵节点的动态分配):typedeflist_Myt;//...constsize_t_MAXBINS=25;_Myt_Templist,_Binlist[