当前位置:  开发笔记 > 编程语言 > 正文

boost :: any/std :: any是否存在就地的小对象?

如何解决《boost::any/std::any是否存在就地的小对象?》经验,为你挑选了2个好方法。

要保存任意大的对象,boost::any/ std::any当然需要为对象分配堆空间.但是,对于大小小于或等于指针(int,char,bool,...)的小类型,any可以将值存储在指针槽或其他一些就地内存中,而不是分配堆空间.但实施是否这样做?

我有一个场景,我经常将小型类型存储在一个any只有strings 类型的大型类型中.代码非常热,因此我在问这个问题.如果没有执行优化,我可能会更好地使用自己的实现来存储小型类型.



1> NathanOliver..:

没有保证,但[any.class]中的C++ 17草案规定了这一点

实现应该避免为小的包含对象使用动态分配的内存.[示例:构造的对象仅包含int.-端示例]这种小物体优化应仅被应用于类型T为哪些is_­nothrow_­move_­constructible_­vtrue.

不幸的是,除了说应该能够存储到位之外,它没有给出应该被视为的建议int.


@NathanOliver不是真的.随着"任何<16>"与"任何<42>"不同类型的"任何"的扩散,使得具有这种词汇类型的目的的一半失败.
如果最大尺寸可以被指定为模板参数(默认值为现在的任何值),本来会很好

2> Josh Kelley..:

如果我正确理解了Boost.Any源代码,并且在调试器中对其进行了调用,则它不会应用小对象优化.(注意无条件使用新的.)

    template
    any(const ValueType & value)
      : content(new holder<
            BOOST_DEDUCED_TYPENAME remove_cv::type>::type
        >(value))
    {
    }

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有