我正在做一些分配和释放内存的测试。这是我正在使用的代码:
#include <stdlib.h>
#include <stdio.h>
#define WAVE_SIZE 100000000
int main(int argc,char* argv[]){
int i;
int **p;
printf("%d allocs...\n",WAVE_SIZE);
// Malloc
printf("Allocating memory...\n");
p = (int**)malloc(WAVE_SIZE*sizeof(int*));
for(i = 0;i < WAVE_SIZE;i++)
p[i] = (int*)malloc(sizeof(int));
// Break
printf("Press a key to continue...\n");
scanf("%*s");
// Dealloc
printf("Deallocating memory...\n");
for(i = 0;i < WAVE_SIZE;i++)
free(p[i]);
free(p);
// Break
printf("Press a key to continue...\n");
scanf("%*s");
return 0;
}
在休息期间,我检查进程使用的总内存,但我没有看到我期望的内容。
直到第一次暂停,我看到内存消耗在增加。但是,在第二次暂停时,我没有看到它被释放。
这是操作系统的事情吗?如果我的机器负载很高,我没有可用内存并且另一个进程尝试分配,会发生什么?