gpt4 book ai didi

c++ - boost Weak_Ptr : Destruction is more expensive than expected

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:48 26 4
gpt4 key购买 nike

无论出于何种原因,我们看到销毁弱指针的成本相当高。这是罪魁祸首代码:

~weak_count() // nothrow  
{
if(pi_ != 0) pi_->weak_release(); // Consumes a huge chunk of our time.
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
id_ = 0;
#endif
}

我们没有处于 Debug模式,调试 Hook 也没有启用。弱释放消耗了非常多的时间。这是一个已知的问题?我们做错了什么吗?

boost 版本:1.36
编译器:VS2008 编译器套件。

不幸的是,由于各种原因,我们被锁定在这个 Boost 版本中,所以我更想知道这些奇怪的支出是否可以在新版本上重复,或者代表已知不良做法的结果。我们只销毁了大约 500k 个弱指针,与销毁类似数量的原始指针相比,这不会在性能上产生明显的差异。当然不会增加 2.5-4 倍的成本。请注意,我们并没有删除上述指针所针对的对象。这笔费用完全来自指针本身的销毁。

这是怎么回事?

最佳答案

weak_ptr 需要类似 shared_ptr 的东西来实现自己——因为它需要能够确定指针是否仍然存在,它需要有一个引用计数结构维护它自己的引用计数的地方。

即,weak_ptr 如何确定对象是否仍然存在,除非引用计数以某种方式保持可用以供它访问? :)

如果您实际上不需要使用 weak_ptr< 来获取一段代码的所有权,那么您可以绕过原始指针而不是 weak_ptr/.

关于c++ - boost Weak_Ptr : Destruction is more expensive than expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4474699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com