自定义堆栈上 std::string 数据的输出

Customize the amout of std::string data on the stack

本文关键字:数据 输出 string 自定义 std 堆栈      更新时间:2023-10-16

我想增加在堆栈上分配的std::string数据量。默认情况下应该是 16 字节,我想要更多像 32 字节的东西。我不确定如何进行:默认的 16 字节是默认分配器的一部分,因此更改分配器就足够了?还是使用类似boost::small_vector的东西会更快?

短字符串优化就是这样,一种优化。它根本不在标准中,这意味着这取决于各个标准库实现是否使用它以及是否公开对它的任何控制。请参阅标准库的文档。请注意,使用它会使您的代码不可移植。

我不知道有任何标准库实现公开了对此功能的任何控制。

这取决于您要支持哪些标准。在C++11之前,分配者是无国籍的。在 C++11 之后,提供的分配器对象的实例存储在分配器感知类中并控制其替换。问题是,对象本身不存储在自动存储中,或者至少不限于这种类型的存储。

因为 std::basic_string 的每个实现都有不同的大小和可用面积(例如 gcc 实现 - 只有 16 个字节,即 15 + 尾随零,clang 22 字节等( 并且您无法更改库类,要实际使用自定义 SSO,您可能必须在堆栈上手动提供存储并围绕 std::basic_string 创建类适配器。