c++ - 为什么我不能在我的 vector 中保留 1,000,000,000?

标签 c++ file memory vector

当我输入以下内容时。代码,我得到的输出为 1073741823。

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

但是,当我尝试通过 v.resize(1000000000); 将 vector 的大小调整为 1,000,000,000 时,程序停止执行。当程序似乎应该能够分配所需的内存时,我如何才能使它能够分配所需的内存?

我在 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;
}

文件的内容现在不应该是 101010 吗?读取一个字符然后用 0 覆盖下一个字符?或者,如果所有内容都被一次读入某个缓冲区,文件中是否应该至少有一个 0 ? 1111110? 但内容保持不变。请解释。 谢谢。

最佳答案

  1. 32 位进程一次只能寻址 4GB 地址空间。通常,这 4GB 地址空间的大部分用于映射其他内容。您的 vector 将占用太多的连续地址空间(40 亿字节),这不太可能可用。

  2. 你应该memory map the file .参见 mmap .

关于c++ - 为什么我不能在我的 vector 中保留 1,000,000,000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797014/

相关文章:

c++ - 如何返回对函数参数中传递的引用的引用?

c++ - 为什么这会给我一个段错误?

c++ - TCHAR[] 转换为字符串

c++ - 为 C++ 源文件构建 debian 包时出错

java - 减少 WebLogic 内存使用

javascript - 如何真正关闭 Web worker 以便浏览器归还占用的内存?

java - 如何设置用Java代码创建的文件的创建日期?

python - 什么文件模式在不存在时创建新数据并在存在时追加新数据

file - 复制包含在不同父文件夹中的许多文件(同名)

Java对象和数组内存位置