关于向量初始化的一些问题

问题描述 投票:2回答:2

我可以用10 ^ 8初始化向量,但我不能用10 ^ 9初始化它。为什么?

 vector<int> bucket;
 bucket.resize(100000000);      √ 
 bucket.resize(1000000000);     ×
c++ vector stl
2个回答
1
投票

C ++向量在连续块中分配内存,当块大小过大时,操作系统可能无法找到这样的块。

您收到的错误消息是否表明您的内存不足?

重点是:即使您认为系统上有足够的内存,如果程序的地址空间无法容纳一个块中的大块,那么您也无法构造大型向量(最大地址空间大小可能不同于32-位和64位程序)。


3
投票

这是因为resize函数将从堆应用内存。你可以想象,你的第二次调整大小操作的大小将是4000000000字节,这大于系统可能分配的空间(可能是你的计算机无法为你找到一块连续的空间),并会导致异常和失败。

您可以申请的最大内存取决于以下原因:

  1. 物理内存的硬件限制。
  2. os位(32位或64位)
  3. 留给用户的记忆。操作系统应该首先满足内核的需要。一般来说,windows内核需要比linux或unix更多的内存。
  4. ..

总之,很难知道您可以使用的准确内存大小,因为它是一个动态值。但你可以通过新的运营商and here is a good reference.进行粗略的估算

© www.soinside.com 2019 - 2024. All rights reserved.