【发布时间】:2013-01-22 13:43:14
【问题描述】:
我正在为三个非常大的数组 (N = 990000001) 分配内存。我知道你必须在堆上分配它,因为它太大了,但即使我这样做,程序也会不断崩溃。是我分配不正确还是我的计算机根本没有足够的内存(我应该有足够的内存)?可能是问题的另一件事是我以某种方式错误地分配了我的内存。当 N 很小时,我现在分配内存的方式工作得很好。任何帮助表示赞赏。
int main()
{
double *Ue = new double[N];
double *U = new double[N];
double *X = new double[N];
for (int i = 0; i < N; i++)
{
X[i] = X0 + dx*i;
Ue[i] = U0/pow((X0*X[i]),alpha);
}
//Declare Variables
double K1;double K2; double K3; double K4;
//Set Initial Condition
U[0] = U0;
for (int i = 0; i < N-1; i++)
{
K1 = deriv(U[i],X[i]);
K2 = deriv(U[i]+0.5*dx*K1,X[i]+0.5*dx);
K3 = deriv(U[i]+0.5*dx*K2,X[i]+0.5*dx);
K4 = deriv(U[i]+dx*K3,X[i+1]);
U[i+1] = U[i] + dx/6*(K1 + 2*K2 + 2*K3 + K4);
}
return 0;
}
【问题讨论】:
-
程序如何崩溃?如果你不告诉我们原因......
-
澄清:
990000001==990,000,001 -
8 bytes * 3 * 990000001 = 22.13GB。很可能它正在抛出std::bad_alloc。 -
至少是在编译吗?
-
所以一个double一般使用8个字节,而你每个数组有9.9亿个double?一台标准的 PC 电脑不可能有超过 22GB 的内存。
标签: c++ arrays memory-management crash heap-memory