使用GMP库时无法分配内存

时间:2013-04-28 14:42:47

标签: c memory gmp

我需要计算三个二维数组。当我尝试使用GMP库初始化阵列时。我收到以下错误:

GNU MP: Cannot allocate memory (size=16)
Aborted (core dumped)

我的记忆是8GB。 t_column大约是2500. row是一个变量,它可以超过10 ^ 7。 部分代码如下所示:(最后一个for循环导致错误)

    mpf_t **h;
    mpf_t **t;
    mpf_t **r;
    h = (mpf_t**)malloc(sizeof(mpf_t *)*row);
    t = (mpf_t**)malloc(sizeof(mpf_t *)*row);
    r = (mpf_t**)malloc(sizeof(mpf_t *)*256);
    int i, d, j;

    for(i = 0; i < row; i++) {
        h[i] = (mpf_t *)malloc(sizeof(mpf_t)*256);
    }
    for(i = 0; i < row; i++) {
        t[i] = (mpf_t *)malloc(sizeof(mpf_t)*t_column);
    }
    for(i = 0; i < 256; i++) {
        r[i] = (mpf_t *)malloc(sizeof(mpf_t)*t_column);
    }

    for(i = 0; i < row; i++) {
        for(j = 0; j < 256; j++)  {
            mpf_init2(h[i][j], 8);
            mpf_set_str(h[i][j], "0.0", 0);
        }
    }

我该如何解决这个问题?如果其他库具有更好的内存分配能力,我对此持开放态度。

1 个答案:

答案 0 :(得分:1)

对于t_column = 2500和row = 10 ^ 7,您的程序将分配大约2883 MB内存。

问题与物理内存大小无关。如果您使用的是32位操作系统,则会有2 ^ 32 = 4GB的内存地址空间。通常内核使用1GB的地址空间,所以你在其余的3GB中找不到连续的空间并且没有malloc()就不奇怪。