Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;向量max_size();_C++_Vector_Max Size - Fatal编程技术网

C++ C++;向量max_size();

C++ C++;向量max_size();,c++,vector,max-size,C++,Vector,Max Size,在32位系统上 std::vector::max_size()返回232-1,字符大小为-1字节 std::vector::max_size()返回230-1,大小为int-4字节 std::vector::max_size()返回229-1,大小为双字节 谁能告诉我最大尺寸取决于什么 如果在64位系统上运行,max_size()的返回值是多少。返回 向量的最大势能大小 由于系统或库的原因,无法到达 实施限制 所以我假设最大值取决于实现。在我的机器上,输入以下代码 std::vector<

在32位系统上

  • std::vector::max_size()
    返回232-1,字符大小为-1字节
  • std::vector::max_size()
    返回230-1,大小为
    int
    -4字节
  • std::vector::max_size()
    返回229-1,大小为
    双字节
  • 谁能告诉我最大尺寸取决于什么

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

    返回

    向量的最大势能大小 由于系统或库的原因,无法到达 实施限制

    所以我假设最大值取决于实现。在我的机器上,输入以下代码

    std::vector<int> v;
    cout << v.max_size();
    
    因此,公式2^(64大小(类型))-1看起来也适用于这种情况。

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

    当然,在32位系统上,你永远不可能真正分配一个那么大的向量;在此之前,您的内存将很早就用完


    对于
    max_size()
    返回的值没有要求,除非您不能分配大于该值的向量。在64位系统上,对于
    char
    ,它可能返回2^64-1,或者它可能返回较小的值,因为系统的内存空间有限。64位PC通常被限制为48位地址空间。

    只需通过

    std::vector<dataType> v;
    std::cout << v.max_size();
    
    std::vector v;
    
    std::cout
    …在此之前很长时间内存就会用完。
    我意识到这是在2010年编写的,但即使在那时,4GiB RAM模块也非常普遍。如今,大多数计算机的最低内存为16GiB。我觉得这个广告应该删除。另外:
    64位PC通常被限制为48位地址空间。
    这仍然准确吗?我认为英特尔处理器现在使用了52条物理地址线,“内存不足”的评论是关于32位地址空间的。可能有一些具有52位地址空间的CPU;我知道Intel提出了57位寻址模式,但我坚持他们“通常”限于48位的说法
    std::vector<dataType> v;
    std::cout << v.max_size();