make_shared如何为管理器对象和被管理对象分配单个动态内存

How does make_shared allocate single dynamic memory for manager object and managed object

make_shared 将动态分配单个内存,从而提高性能。但是它如何为托管对象和控制块使用 new 进行单个内存分配。我想知道内存分配实际上是如何在内部发生的。

make_shared will make a single memory allocation dynamically

请注意,这不是标准所要求的。这是可能的,并且好的实现可以做到这一点。

怎么做到的?

例如,它可以通过分配一个未初始化的内存块来实现,该内存块足够大以包含控制块和指向的对象,同时考虑到它们的对齐要求,然后使用 [= 构造两个对象中的每一个13=] 可用于分配内存。这有点类似于 std::vector::reserve 可以分配一块内存,稍后可以在其中构造多个对象。