如何在c ++中分配非常大的字段

时间:2011-11-18 20:28:37

标签: c visual-c++ malloc

我有问题。我需要分配几个非常大的字段和数十亿个浮点元素。

目前我正在使用:

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会终止它。我需要有这样的阵列,而且要大得多,有没有更好的方法呢?

3 个答案:

答案 0 :(得分:3)

你应该使用内存映射文件,我认为这将是一个很好的解决方案。 http://msdn.microsoft.com/en-us/library/dd997372.aspx

答案 1 :(得分:2)

想一想。你提到“数十亿浮动元素”。每个浮点数将为4个字节。 “十亿”已经意味着需要超过4GB的内存......

你要做的事情是不可能的,因为数十亿的花车将占用超过2GB的内存。

如果你只是试图绕过2GB的限制,你需要编译为64位。

答案 2 :(得分:1)

根据您要执行的操作以及平台体系结构(群集?),您可能需要处理文件,并且只能活动数据块或在计算机之间分配负载。