在 32 位系统上。
std::vector<char>::max_size()
返回 2 32 -1,大小为char
— 1 字节std::vector<int>::max_size()
返回 2 30 -1,大小为int
— 4 字节std::vector<double>::max_size()
返回 2 29 -1,大小为double
— 8 字节
谁能告诉我max_size()
取决于什么?
max_size()
如果它在 64 位系统上运行,返回值是多少。
max_size()
是可以放入向量中的理论最大项目数。在 32 位系统上,理论上您可以分配 4Gb == 2^32,即 2^32char
值、2^30int
值或 2^29double
值。您的实现似乎正在使用该值,但减去 1。
当然,你永远不可能在 32 位系统上真正分配这么大的向量。在那之前你会用完内存。
max_size()
除了不能分配比该值更大的向量之外,对返回的值没有任何要求。在 64 位系统上,它可能返回 2^64-1 char
,或者它可能返回一个较小的值,因为系统只有有限的内存空间。无论如何,64 位 PC 通常仅限于 48 位地址空间。
由于系统或库实现限制,向量可能达到的最大潜在大小。
所以我认为最大值取决于实现。在我的机器上,下面的代码
std::vector<int> v;
cout << v.max_size();
产生输出:
4611686018427387903 // built as 64-bit target
1073741823 // built as 32-bit target
所以公式 2^(64-size(type))-1 在这种情况下看起来也是正确的。
只需通过以下方式获得答案
std::vector<dataType> v;
std::cout << v.max_size();
或者我们可以通过 得到答案(2^nativePointerBitWidth)/sizeof(dataType) - 1
。例如,在 64 位系统上,long long
(通常)是 8 字节宽,所以我们有(2^64)/8 - 1 == 2305843009213693951
.