"single allocation"对提升意味着什么:make_shared
What does "single allocation" mean for boost::make_shared
在make_shared的boost文档中,它说:
除了方便和风格,这样的函数也是异常安全且相当可观的更快,因为它可以为对象及其对应的对象使用单个分配控制块,消除了很大一部分shared_ptr的构造开销。
我不明白"single allocation"是什么意思,它是什么意思?
"分配"是指从调用分配器中获得的一块内存。
通常,用指针构造函数创建shared_ptr
会为"控制块"分配内存,控制块保存引用计数和删除器。该shared_ptr
的副本都引用相同的控制块,因此它们共享引用计数。因此总共有两个分配——对象本身和shared_ptr
创建的控制块。
如果您创建对象和shared_ptr
以及make_shared
,那么只进行一次分配。您可以将其视为具有两个成员的单个结构体:
- 正在管理的对象
- 控制块。
shared_ptr
需要为引用计数分配空间。这意味着您将动态创建对象(一次分配)并将其传递给shared_ptr
,后者将依次分配计数(第二次分配)。make_shared
执行一个足够大的单个分配,然后在适当的地方构建计数和对象。
相关文章:
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- make 命令如何避免重新编译未更改的源文件?
- MAKE:找不到包含的用户定义的头文件?
- 'make check' GLIBC 运行时的链接问题
- 引用 std::shared:ptr 以避免引用计数
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- mingw32-make 使用"MinGW Makefiles"生成器跟踪 CMAKE 无法将可执行文件链接到对象库
- make 命令创建 .file,但不创建应用程序文件
- 如何摆脱导入的 make 项目中的 Eclipse 索引器"Type std::... could not be resolved"错误
- Qt Creator 在执行步骤 "make" 时出现编译错误,-fno-stack-limit
- 如何使用MySQL Connector and Make设置C++项目
- 使用 make 将对象文件放在特定目录中
- 我是 C++ 的新手,我试图调用 make 一个以 2 个类作为其参数的类构造函数
- "Make"失败并出现 Clang 错误 - 如何从 Clang 获得错误?
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 防止 GNU Make 在每次构建时生成 protobuf 代码
- Make zmqpp::socket::connect a std::future
- 链接从命令行转换为Make的库
- 将 make 和 cmake 合并到构建系统中