将值分配给大型数组时,即使没有分配新内存,使用的内存也会不断增加.我只是通过任务管理器(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)
我没有看到任何逻辑问题,但据我所知,我也没有超出任何系统限制.所以我的问题是:
他人可以重现这个问题吗?
记忆力增长的原因是什么?
我该如何解决这个问题?
当现代系统"分配"内存时,页面实际上并未在物理RAM中分配.您将获得虚拟内存分配.当您写入这些页面时,将采用物理页面.因此,当您执行此操作时malloc(),所采用的虚拟RAM将会增加,但只有在您输入值时才会采用物理RAM(逐页).