What does “single allocation” mean for boost::make_shared

回眸只為那壹抹淺笑 提交于 2019-12-21 09:09:09

问题


In the boost doc of make_shared, it says:

Besides convenience and style, such a function is also exception safe and considerably faster because it can use a single allocation for both the object and its corresponding control block, eliminating a significant portion of shared_ptr's construction overhead.

I don't understand the meaning of "single allocation", what does it mean?


回答1:


An "allocation" means a block of memory obtained from a call to an allocator.

Usually, creating a shared_ptr with the pointer constructor allocates memory for a "control block", which holds the reference count and the deleter. Copies of that shared_ptr all refer to the same control block, so that they share the reference count. Hence there are two allocations in total - the object itself and the control block created by shared_ptr.

If you create the object and shared_ptr together with make_shared, then only one allocation is made. You can think of this as a single struct with two members:

  1. The object which is being managed
  2. The control block.



回答2:


The shared_ptr needs to allocate space for the reference count. This means that you will dynamically create your object (one allocation) and pass it to the shared_ptr that will in turn allocate the count (second allocation). make_shared performs a single allocation of a big enough size and then constructs in place both the count and the object.



来源:https://stackoverflow.com/questions/7044168/what-does-single-allocation-mean-for-boostmake-shared

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!