哪些图书馆使用“我们知道你住在哪里”优化std :: make_shared?

时间:2014-05-27 03:22:33

标签: c++ optimization c++11 boost shared-ptr

两年多以前,Stephan T. Lavavej described a space-saving optimization他在Microsoft的std::make_shared实现中实现了,我从与他交谈时得知微软对采用这种优化的其他库实现没有任何反对意见。如果您确定其他库(例如,对于Gnu C ++,Clang,Intel C ++,加上Boost(对于boost::make_shared))是否已采用此实现,请提供答案。我没有准备好访问那么多的make_shared实现,也不是在考虑如果他们已经实现了WKWYL优化,我还要考虑其中的内容,但是我希望SO读者知道一些图书馆的答案。我从查看Boost 1.52的代码中了解到,WKWYL优化尚未实现,但Boost现在已达到1.55版本。

请注意,此优化与std::make_shared避免std::shared_ptr使用的引用计数的专用堆分配的能力不同。有关WKWYL与优化之间差异的讨论,请参阅this question

1 个答案:

答案 0 :(得分:5)

libc ++似乎实现了优化。请参阅http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/memory?revision=210211&view=markup__shared_ptr_pointer__shared_ptr_emplace之间的区别。

libstdc ++似乎也实现了它。请参阅https://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/include/bits/shared_ptr_base.h?revision=210015&view=markup_Sp_counted_ptr_Sp_counted_ptr_inplace之间的区别。