我想增加堆栈上分配的std::string数据量。默认情况下应该是16字节,我想要更多,比如32字节。我不确定的是如何继续:默认的16字节是否是默认分配器的一部分,这样更改分配器就足够了?或者使用像boost::small_vector这样的东西会更快
发布于 2019-09-24 15:31:33
短串优化就是这样,一种优化。它根本不包含在标准中,这意味着它取决于各个标准库实现是否使用它,以及是否公开对它的任何控制。请查阅标准库的文档。请注意,使用它会使您的代码不可移植。
据我所知,没有任何标准库实现公开了对此功能的任何控制。
发布于 2019-09-24 15:37:16
这取决于您想要支持的标准。在C++11之前,分配器是无状态的。在C++11之后,提供的分配器对象的一个实例被存储在支持分配器的类中,并控制它的替换。问题是,对象本身并不存储在自动存储中,或者至少不限于这种类型的存储。
因为std::basic_string的每个实现都有不同的大小和可用区域(例如,gcc实现-只有16个字节,即15 +尾随零,clang 22字节,等等)而且您不能更改库类,要实际使用自定义单点登录,您可能必须手动提供堆栈上的存储,并围绕std::basic_string创建类适配器。
https://stackoverflow.com/questions/58075086
复制相似问题