STL源码中,空间配置器Allocator是如何实现的?

2026-04-28 04:110阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1235个文字,预计阅读时间需要5分钟。

STL源码中,空间配置器Allocator是如何实现的?

以STL的使用角度而言,空间配置器并非必须介绍的内容,因为它扮演的是后台的角色,隐藏在容器背后默认工作。然而,从STL的实现角度出发,首先应该介绍的是空间配置器。

  以STL的运用角度而言,空间配置器是最不需要介绍的东西,因为它扮演的是幕后的角色,隐藏在一切容器的背后默默工作。但以STL的实现角度而言,最应该首先介绍的就是空间配置器,因为这是这是容器展开一切运作的基石。空间配置器顾名思义就是配置空间的器件,为存放在容器里的信息找到安家落户的地方(内存)。

  SGI STL上有两个空间配置器,一个是std::allocator,一个是std::alloc,前者只是单纯的把基层的内存配置/释放行为(::operator new 和 ::operator delete)做了一层简单的封装,不作总结;后者才是我们应该重点学习的对象。

  一般而言,C++的内存配置与释放操作是这样的:

1 class Foo {...}; 2 Foo* pf = new Foo; 3 delete pf;

  其中的new包含两阶段的操作:(1)调用::operator new分配内存;(2)调用Foo::Foo()构造对象内容。delete也包含两阶段的操作:(1)调用Foo::~Foo()将对象析构;(2)调用::operator delete释放内存。。

  而在std::alloc中同理,内存配置操作由alloc::allocate()负责,释放由alloc::deallocate()负责;对象构造操作由::construct()负责,析构由::destroy()负责。

阅读全文

本文共计1235个文字,预计阅读时间需要5分钟。

STL源码中,空间配置器Allocator是如何实现的?

以STL的使用角度而言,空间配置器并非必须介绍的内容,因为它扮演的是后台的角色,隐藏在容器背后默认工作。然而,从STL的实现角度出发,首先应该介绍的是空间配置器。

  以STL的运用角度而言,空间配置器是最不需要介绍的东西,因为它扮演的是幕后的角色,隐藏在一切容器的背后默默工作。但以STL的实现角度而言,最应该首先介绍的就是空间配置器,因为这是这是容器展开一切运作的基石。空间配置器顾名思义就是配置空间的器件,为存放在容器里的信息找到安家落户的地方(内存)。

  SGI STL上有两个空间配置器,一个是std::allocator,一个是std::alloc,前者只是单纯的把基层的内存配置/释放行为(::operator new 和 ::operator delete)做了一层简单的封装,不作总结;后者才是我们应该重点学习的对象。

  一般而言,C++的内存配置与释放操作是这样的:

1 class Foo {...}; 2 Foo* pf = new Foo; 3 delete pf;

  其中的new包含两阶段的操作:(1)调用::operator new分配内存;(2)调用Foo::Foo()构造对象内容。delete也包含两阶段的操作:(1)调用Foo::~Foo()将对象析构;(2)调用::operator delete释放内存。。

  而在std::alloc中同理,内存配置操作由alloc::allocate()负责,释放由alloc::deallocate()负责;对象构造操作由::construct()负责,析构由::destroy()负责。

阅读全文