C++ C++;向量max_size();
在32位系统上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<
std::vector::max_size()
返回232-1,字符大小为-1字节std::vector::max_size()
返回230-1,大小为int
-4字节std::vector::max_size()
返回229-1,大小为双字节
max_size()
的返回值是多少。返回
向量的最大势能大小
由于系统或库的原因,无法到达
实施限制
所以我假设最大值取决于实现。在我的机器上,输入以下代码
std::vector<int> v;
cout << v.max_size();
因此,公式2^(64大小(类型))-1看起来也适用于这种情况。max_size()
是可以放入向量的理论最大项数。在32位系统上,理论上可以分配4Gb==2^32,即2^32char
值、2^30int
值或2^29double
值。您的实现似乎正在使用该值,但要减去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();