我在查看std::string::max_size时,注意到了以下示例:
#include <iostream>
#include <string>
int main ()
{
std::string str ("Test string");
std::cout << "max_size: " << str.max_size() << "\n";
return 0;
}
输出结果为:
max_size: 4294967291
然而,我一直认为这个限制是由于无符号整数/size_t的最大值所致 - 所以我有点期望它是
2^32 - 1
,这将是4294967295
。为什么在此示例中,最大大小没有使用这些4个字节?我还尝试运行示例代码,在那台机器上它是
2^62
- 这再次让我感到困惑,为什么它不是2^64 - 1
呢?总的来说,我想知道,出于什么原因实现不会使用所有空间?
std::string
允许 NUL 字符,(2)size()
必须为 O(1),因此长度必须是它的有效负载的一部分,这将占用 4 个字节,对于最大理论长度的字符串。或者,这可能是用于短字符串优化的指针。 - Bathsheba18446744073709551599
。因此请咨询不同的标准库实现者,你会得到更好的答案。 - Matthieu Brucherstd::string::max_size()
超过了可用内存,而在某些架构上,你可能拥有比max_size
给出的限制更多的内存。 - 463035818_is_not_a_number