条目十《了解分配子(allocator)的约定和限制》

Posted liangjf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条目十《了解分配子(allocator)的约定和限制》相关的知识,希望对你有一定的参考价值。

条目十《了解分配子(allocator)的约定和限制》

在STL标准库中,分配子的存在有点怪异。

一开始的设计意图是提供一个内存模型的抽象,让使用库者库忽略操作系统的near指针和far指针问题。但此目的没有达到。另一个目的是为了有利于开发作为对象形式存在的内存管理器。

从书中的这句话,其实我咋一看下去是比较模糊。细细琢磨,stl中的allocator就是发育畸形了,没有按照本意来发育,成为了另外一种存在。

在多数标准容器中,没有从它们的分配子allocator分配内存。

** 分配子注意什么? **

  • 1.可移植的分配子不能有任何非静态的数据成员。(这样的分配子不是等价的,在运行时会破坏数据结构)
  • 2.确保分配子是等价的

编写自定义的分配子,需要:

  • 1.把分配子写成模板形式,模板参数T代表待分配内存的对象的类型
  • 2.提供类型定义pointer和reference,始终让pointer为T*,reference为T&
  • 3.分配子不能拥有随对象不同的状态。即,分配子不能有非静态数据成员
  • 4.记住分配子的allocate成员函数申请的是待分配内存的对象的对象个数,不是字节数。这些函数返回T*指针。
  • 5.必须提供嵌套的rebind模板,因为标准容器以来该模板。

参考:

《Effective STL》

以上是关于条目十《了解分配子(allocator)的约定和限制》的主要内容,如果未能解决你的问题,请参考以下文章

JPA/Hibernate/HSQLDB 查询但不分配子对象

php计算网段内所有IP,分配子网段

是否有关于如何布置全局描述符表条目的约定?

C ++错误:抛出'std :: bad_alloc'实例后调用terminate

Linux 内核 内存管理物理分配页 ① ( 分区伙伴分配器物理分配页核心函数 __alloc_pages_nodemask | __alloc_pages_nodemask 函数完整源码 )

接口的屏蔽和限流很难么?Redis全搞定!