Warum gibt free () nicht wirklich Speicher frei?
Ich mache einige Tests, um Speicher zuzuweisen und die Zuordnung aufzuheben. Dies ist der Code, den ich verwende:
#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;
}
In den Pausen überprüfe ich den vom Prozess belegten Gesamtspeicher und sehe nicht, was ich erwarte.
Bis zur ersten Pause sehe ich einen Anstieg des Speicherverbrauchs. In der zweiten Pause sehe ich jedoch keine Veröffentlichung.
Ist das ein OS-Ding? Was passiert, wenn die Last meines Computers hoch ist, ich keinen freien Speicher habe und ein anderer Prozess versucht, ihn zuzuweisen?