为什么我不能在我的矢量中保留1,000,000,000?

shr*_*har 5 c++ memory file vector

当我输入foll时.代码,我得到的输出为1073741823.

#include <iostream>
#include <vector>
using namespace std;
int main()
{
  vector <int> v;
  cout<<v.max_size();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将矢量调整为1,000,000,000时,v.resize(1000000000);程序停止执行.我怎样才能让程序分配所需的内存,当它看起来应该能够?

我在Windows 7中使用MinGW.我有2 GB RAM.应该不可能吗?如果不可能,我不能将它声明为整数数组并逃脱?即使这不起作用.

另一件事是,假设我会使用一个文件(可以轻松处理如此多的数据).我怎样才能让它在同一时间读写.首先使用fstream file("file.txt', ios::out | ios::in );不创建文件.但假设文件存在,我无法同时进行读写操作.我的意思是这样的:让文件的内容为,111111 如果我运行: -

#include <fstream>
#include <iostream>
using namespace std;
int main()
{
  fstream file("file.txt",ios:in|ios::out);
  char x;
  while( file>>x)
  {
    file<<'0';
  }
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

文件的内容现在不应该是101010?读一个字符,然后用0覆盖下一个字符?或者将整个内容立即读入某个缓冲区,文件中是否至少有一个0?1111110?但内容保持不变.请解释.谢谢.

Meh*_*ari 14

  1. 32位进程一次只能处理4GB的地址空间.通常,这4GB的大量地址空间用于映射其他内容.你的向量将占用太多连续的地址空间(40亿字节),这是不可能的.

  2. 你应该记忆映射文件.见mmap.

  • Win32上的地址空间限制为2GiB.我认为Linux应该是3GiB. (2认同)