谢谢
答案 0 :(得分:8)
默认情况下,为std::string
分配的内存是动态分配的。
请注意std::string
有一个max_size()
函数,返回实现支持的最大字符数。然而,这是有用的,因为它是一个实现最大值,并没有考虑其他资源,如内存。你的真正限制要低得多。 (尝试分配4GB的连续内存,或考虑其他地方的内存耗尽。)
答案 1 :(得分:2)
std::string
对象的分配方式与int
或任何其他类型必须相同:在堆栈上,如果它是局部变量,或者它可能是static
,或者在使用new std::string
的堆或new X
X
包含string
等的堆。
但是,std::string
对象可能至少包含指向分配器提供的额外内存的指针,basic_string<>实例化 - 对于std::string
typedef
,这意味着堆分配的内存。直接在原始std::string
对象内存或指向堆中,您可以找到:
某些std::string
实现具有“短字符串”优化,它们只将少量字符的字符串直接打包到字符串对象本身中(为了提高内存效率,通常使用某种类型的联合字段用于其他目的)当字符串更长时)。但是,对于其他字符串实现,甚至对于那些在处理太长而不能直接适应std :: string对象的字符串时具有短字符串优化的字符串实现,它们必须遵循对存储的文本数据的指针/引用在分配器提供的(堆)内存中。