0

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

4

1 回答 1

2

make_shared 将动态进行单个内存分配

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

怎么可能做到?

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

于 2016-10-12T19:11:58.583 回答