我可以用10 ^ 8初始化向量,但我不能用10 ^ 9初始化它。为什么?
vector<int> bucket;
bucket.resize(100000000); √
bucket.resize(1000000000); ×
C ++向量在连续块中分配内存,当块大小过大时,操作系统可能无法找到这样的块。
您收到的错误消息是否表明您的内存不足?
重点是:即使您认为系统上有足够的内存,如果程序的地址空间无法容纳一个块中的大块,那么您也无法构造大型向量(最大地址空间大小可能不同于32-位和64位程序)。
这是因为resize函数将从堆应用内存。你可以想象,你的第二次调整大小操作的大小将是4000000000字节,这大于系统可能分配的空间(可能是你的计算机无法为你找到一块连续的空间),并会导致异常和失败。
您可以申请的最大内存取决于以下原因:
总之,很难知道您可以使用的准确内存大小,因为它是一个动态值。但你可以通过新的运营商and here is a good reference.进行粗略的估算