19

在 32 位系统上。

  1. std::vector<char>::max_size()返回 2 32 -1,大小为char— 1 字节
  2. std::vector<int>::max_size()返回 2 30 -1,大小为int— 4 字节
  3. std::vector<double>::max_size()返回 2 29 -1,大小为double— 8 字节

谁能告诉我max_size()取决于什么?

max_size()如果它在 64 位系统上运行,返回值是多少。

4

3 回答 3

30

max_size()是可以放入向量中的理论最大项目数。在 32 位系统上,理论上您可以分配 4Gb == 2^32,即 2^32char值、2^30int值或 2^29double值。您的实现似乎正在使用该值,但减去 1。

当然,你永远不可能在 32 位系统上真正分配这么大的向量。在那之前你会用完内存。

max_size()除了不能分配比该值更大的向量之外,对返回的值没有任何要求。在 64 位系统上,它可能返回 2^64-1 char,或者它可能返回一个较小的值,因为系统只有有限的内存空间。无论如何,64 位 PC 通常仅限于 48 位地址空间。

于 2010-09-28T13:31:14.763 回答
12

max_size()返回

由于系统或库实现限制,向量可能达到的最大潜在大小。

所以我认为最大值取决于实现。在我的机器上,下面的代码

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 在这种情况下看起来也是正确的。

于 2010-09-28T13:31:09.117 回答
11

只需通过以下方式获得答案

std::vector<dataType> v;
std::cout << v.max_size();

或者我们可以通过 得到答案(2^nativePointerBitWidth)/sizeof(dataType) - 1。例如,在 64 位系统上,long long(通常)是 8 字节宽,所以我们有(2^64)/8 - 1 == 2305843009213693951.

于 2018-07-09T06:36:21.573 回答