"single allocation"对提升意味着什么:make_shared

What does "single allocation" mean for boost::make_shared

本文关键字:make shared 什么 single allocation 意味着      更新时间:2023-10-16

在make_shared的boost文档中,它说:

除了方便和风格,这样的函数也是异常安全且相当可观的更快,因为它可以为对象及其对应的对象使用单个分配控制块,消除了很大一部分shared_ptr的构造开销。

我不明白"single allocation"是什么意思,它是什么意思?

"分配"是指从调用分配器中获得的一块内存。

通常,用指针构造函数创建shared_ptr会为"控制块"分配内存,控制块保存引用计数和删除器。该shared_ptr的副本都引用相同的控制块,因此它们共享引用计数。因此总共有两个分配——对象本身和shared_ptr创建的控制块。

如果您创建对象和shared_ptr以及make_shared,那么只进行一次分配。您可以将其视为具有两个成员的单个结构体:

  1. 正在管理的对象
  2. 控制块。

shared_ptr需要为引用计数分配空间。这意味着您将动态创建对象(一次分配)并将其传递给shared_ptr,后者将依次分配计数(第二次分配)。make_shared执行一个足够大的单个分配,然后在适当的地方构建计数和对象。