gpt4 book ai didi

C++ SSO:如何以编程方式查找是否使用短字符串优化分配了 std::wstring?

转载 作者:行者123 更新时间:2023-12-05 01:32:08 25 4
gpt4 key购买 nike

如何以编程方式查找 std::wstring 是否分配了 Short String Optimization?我试图检测此类情况并使用 reserve 移出 SSO。

下面的代码在地址中打印了一个小差异:

#include <string>
#include <iostream>
int main ()
{
std::wstring str = L"H";
std::cout<<&str<<" "<<(void*)str.data()<<"\n";
}

输出示例:

0x7ffc39465220 0x7ffc39465230

enter image description here

尽管在 Windows 控制台应用程序中地址完全相同:

enter image description here

最佳答案

主要有两种方法:

  1. 直接测试一下。

    记得使用std::less获得完整订单,以及std::addressof解释奇怪类中的重载 op&

    template <class T>
    constexpr bool uses_sbo(T&& t) noexcept {
    auto less = std::less<const volatile void*>();
    auto p = std::addressof(t);
    return less(t.data(), p + 1) && !less(p, t.data()));
    }
  2. 比较容量。

    这依赖于实现是明智的,这意味着当当前容量足够时永远不会动态分配,并且原则上不会动态分配初始缓冲区。

    template <class T>
    constexpr bool is_minimal(T&& t) noexcept {
    return t.capacity() == T().capacity();
    }

两者都适用于所有连续的容器。

关于C++ SSO:如何以编程方式查找是否使用短字符串优化分配了 std::wstring?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65736613/

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