我有问题。我需要分配几个非常大的字段和数十亿个浮点元素。
目前我正在使用:
float ****spaceE;
int x,y,z;
x = y = z = 100;
spaceE = (float****)malloc(x*sizeof(int));
for (int i=0; i<x; i++)
{
spaceE[i] = (float***)malloc(y*sizeof(int));
for(int j=0; j<y; j++)
{
spaceE[i][j] = (float**)malloc(z*sizeof(int));
for(int k=0; k<z; k++)
{
spaceE[i][j][k] = (float*)malloc(size[3]*sizeof(float));
}
}
}
但是它会占用超过2GB的内存而Windows会终止它。我需要有这样的阵列,而且要大得多,有没有更好的方法呢?
答案 0 :(得分:3)
你应该使用内存映射文件,我认为这将是一个很好的解决方案。 http://msdn.microsoft.com/en-us/library/dd997372.aspx
答案 1 :(得分:2)
想一想。你提到“数十亿浮动元素”。每个浮点数将为4个字节。 “十亿”已经意味着需要超过4GB的内存......
你要做的事情是不可能的,因为数十亿的花车将占用超过2GB的内存。
如果你只是试图绕过2GB的限制,你需要编译为64位。
答案 2 :(得分:1)
根据您要执行的操作以及平台体系结构(群集?),您可能需要处理文件,并且只能活动数据块或在计算机之间分配负载。