【问题标题】:Disable std:string's SSO禁用 std:string 的 SSO
【发布时间】:2016-01-14 11:43:24
【问题描述】:

我想知道是否有办法以编程方式禁用字符串SSO 以使其不使用本地缓冲区来处理短字符串?

【问题讨论】:

    标签: c++ string stdstring


    【解决方案1】:

    由于 SSO 是一种可选优化,因此没有标准方法可以将其关闭。

    实际上,您可以只reserve 一个不适合 SSO 缓冲区的字符串来强制动态分配缓冲区:

    std::string str;
    str.reserve(sizeof(str) + 1);
    

    这似乎至少适用于 gcc,甚至应该可以移植,因为内部缓冲区需要适合字符串。 (Live)

    【讨论】:

    • 使用这种方法有什么已知的缺点吗?
    • @SayantanGhosh 显而易见的是,禁用优化会失去其性能优势。这里更有趣的问题是:这样做有什么好处?如果您的代码不能与 SSO 一起使用,但如果没有,那么您最好修复代码而不是修补症状。
    • 我在使用 set emplace 时遇到了同样的问题:stackoverflow.com/questions/56896539/… 正在评估使用 char 数组与上述方法的手动分配,因为分配会在释放时带来一些额外的管理。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多