【发布时间】:2012-02-24 15:29:45
【问题描述】:
当我尝试调整列表大小时,程序崩溃...查看该代码,尝试输入 1,000,000,000 (10^9)...在我的 windows 7 x64 上不起作用。
#include <cstdlib>
#include <iostream>
#include <list>
using namespace std;
int main(int argc, char *argv[])
{
list<long long> l;
long long n;
cin>>n;
cout<<l.max_size()<<endl;
//uncomment 1 or 2
//l.resize(n,l.size()+1); //1st try
/*for (long long i=0; i<n; i++) //2nd try
l.push_back(n);*/
//system("PAUSE"); // uncomment if needed
return 0;
}
最大尺寸超过 4*10^9,但还是不行……我用的是最新的 MinGW (G++)
【问题讨论】:
-
你认为 10^9 个列表元素消耗了多少内存?即使它是一个简单的双链表,您也有 2 个指针(2 x 8 字节)+ 值(另外 8 个字节)(每个元素全部),这为您提供了大约 24GB 的内存需求。另请注意,实现甚至可能需要的不仅仅是这些 2x8Byte + 每个元素的数据类型大小。
-
1000000000 * sizeof(long long)可能比您的计算机可用的 RAM 字节数更多。试试downloading more RAM。 -
为什么会崩溃?你没记忆了?操作系统不必 [实际上,它不允许您的程序拥有 2^64 字节,即使对于 64 位系统也是如此
-
@daknøk:实际上,[通常] 你可以分配更多的内存然后你有 RAM。这就是虚拟内存用于...的原因之一。
-
@daknøk +1 哇,感谢您的链接。我只需点击几下就升级到 16 GB。非常感谢这个链接。