C ++ vector max_size();

时间:2010-09-28 13:21:24

标签: c++ vector max-size

在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字节
  4. 任何人都可以告诉我max_size()取决于什么?

    如果它在64位系统上运行,那么max_size()的返回值是什么。

3 个答案:

答案 0 :(得分:19)

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

当然,你永远不可能真正分配一个大的矢量;在那之前很久你就会失去记忆。

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

答案 1 :(得分:7)

max_size()返回

  

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

所以我认为最大值是依赖于实现的。在我的机器上有以下代码

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

产生输出:

4611686018427387903 // built as 64-bit target
1073741823 // built as 32-bit target

所以公式2 ^(64-大小(类型)) - 1看起来也是正确的。

答案 2 :(得分:2)

通过

即可获得答案
Vector<data-type>v;
Cout<< v.max_size();

或者我们可以通过以下方式获得答案

(2^bit of system)/sizeof(datatype) -1
Eg for 64 bit system
Iong long datatype has size =8 bit
Ans =(2^64)/8 -1
2305843009213693951