在分配大型阵列时增加内存

use*_*752 1 c c++

将值分配给大型数组时,即使没有分配新内存,使用的内存也会不断增加.我只是通过任务管理器(Windows)或系统监视器(Ubuntu)来检查已用内存.

两个操作系统的问题都是一样的.我分别使用gcc 4.7或4.6.

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int i,j;
    int n=40000000;   //array size
    int s=100;
    double *array;

    array=malloc(n*sizeof(double));     //allocate array
    if(array==NULL){
        return -1;
    }

    for(i=0;i<n;i++){   //loop for array, memory increases during this loop
        for(j=0;j<s;j++){   //loop to slow down the program
            array[i] = 3.0;
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我没有看到任何逻辑问题,但据我所知,我也没有超出任何系统限制.所以我的问题是:

  • 他人可以重现这个问题吗?

  • 记忆力增长的原因是什么?

  • 我该如何解决这个问题?

abl*_*igh 5

当现代系统"分配"内存时,页面实际上并未在物理RAM中分配.您将获得虚拟内存分配.当您写入这些页面时,将采用物理页面.因此,当您执行此操作时malloc(),所采用的虚拟RAM将会增加,但只有在您输入值时才会采用物理RAM(逐页).