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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage