【发布时间】:2017-04-01 15:52:10
【问题描述】:
我正在尝试运行一个简单的代码来创建一个二维数组。起初我正常声明了数组,但它异常终止。
在任务管理器中,程序通常会增长到 0.4 MB 的大小并被终止。所以,经过一番研究,我发现了堆,因此试图存储在那里。这次它占用了将近 3 GB,并且由于内存不足而重新启动了我的操作系统。
int main()
{
for(int i=0;i<1000;i++) // outer loop to create 1000 instances
{
int** c = new int*[3000]; // creating 2D array of size 3000*3000
int** b = new int*[3000];
for(int z=0;z<3000;z++)
{
c[z] = new int[3000];
b[z] = new int[3000];
}
}
return 0;
}
所以,据我所知,c 的最大大小是 [3000][3000] = 36*10^6 B = 36 MB
现在我有 4GB 的 RAM,所以这似乎很不公平。
无论如何,我知道 C++ 没有自动垃圾收集;这就是遗体被排除在外的原因。但是,我需要这个数组结构来进行计算。我怎样才能让它使用更多的可用内存?
【问题讨论】:
-
对不起,我是认真的。刚刚写错了!
-
for(int z=0;z<k;z++)k是什么? -
请去掉
C标签,因为这与C无关。你需要的内存实际上是2 * 3000 * 3000 * z * n * sizeof(int),肯定比36MB多。 -
如果你想把内存放回去重用,为什么不
delete呢? -
@FREE_AND_OPEN_SOURCE 不要理解你。
标签: c++ memory-management