通过new和allocator分配内存有什么区别

BJC*_*BJC 5 c++ memory-management stl allocator

通过new/ malloc和内存分配有什么区别allocator

为什么我们永远需要载体的独立内存分配器,如果我们的选择newmalloc

pho*_*gon 2

呃,我觉得和newmalloc不一样的,allocator提供的功能也不一样。malloc返回未初始化的数据,并calloc返回数据。但是,new如果您正在创建某个类的实例(而不是这些基本类型,顺便说一下,它们也可以初始化),则会int调用bool构造函数delete会调用析构函数,而free不会。

至于allocator,它为用户提供了一个抽象层。allocator可以返回构造的对象、未初始化的内存空间,或者销毁对象或释放空间。STL容器用于allocator 获取内存空间并创建对象。

但请注意,由于自定义allocator是可能的, anallocator不一定像new/那样管理内存delete。它可以创建一大块内存,然后进行一些分配缓存。它可以返回映射到磁盘上文件的区域中的内存地址,以便内部数据在被上层容器修改时进入文件系统。它还可以调用new来获取内存。通过这种方式,allocator用户可以构建位于内存特定区域的容器。因此,使用allocators,容器的内部逻辑与内存存储的管理方式分离。

实际上,您可以编写一个派生类来std::allocator实现上述每个功能。


您可能想阅读本文以获取有关 s 的更详细讨论allocator