gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:24 25 4
gpt4 key购买 nike

通过new/mallocallocator 分配内存有什么区别?

如果我们有 newmalloc 选项,为什么我们还需要一个单独的 vector 内存分配器?

最佳答案

嗯,我觉得newmalloc是不一样的,allocator提供的功能不一样。 malloc 返回未初始化的数据,calloc 返回 数据。但是如果你正在创建某个类的实例,new 将调用构造函数(不是 intbool 这些 primitive类型,顺便说一句,也可以初始化)。 delete 会调用析构函数,而 free 不会。

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

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

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


您可能想阅读 this有关 allocator 的更详细讨论。

关于c++ - 通过new和allocator分配内存有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14921531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com