Zurückgeben des dynamisch zugewiesenen Speichers an das Betriebssystem, ohne das Programm zu beenden

Ich arbeite an einem Programm, in dem ich viel, aber wenig Speicher verwende. Speicher wird zur Laufzeit auf verschiedenen Threads zugewiesen und freigegeben. Ich bemerkte jedoch, dass die Speichernutzung des Programms nicht innerhalb der angegebenen Grenzen bleiben würde. Es würde mit der Zeit zunehmen. Ich habe das folgende Beispielprogramm geschrieben, um zu überprüfen, ob Speicher für das Betriebssystem freigegeben wird. Die Hälfte des zugewiesenen Speichers wurde freigegeben, um zu überprüfen, ob die Speichernutzung gesunken ist.

int main()
{
    char *p[COUNT];

    for(int i = 0; i < COUNT; i++)
    {
        p[i] = new char[1048576];
        memset (p[i], 0, 1048576);
        printf("%p\n", p[i]);
    }

    printf("done allocating ... \n");

    sleep(10);

    printf("Freeing\n");
    for(int i; i < COUNT; i++)
    {
        delete[] p[i];
    }

    while(1)
        sleep(1);
}

Nach dem Ausführen des Programms schien das Betriebssystem die freigegebenen Seiten nicht zurückzugewinnen. Die Speichernutzung bleibt nach dem Zuweisen und nach dem Freigeben dieselbe wie im Befehl "top" unter Linux. Es markiert die Seiten einfach als frei zur Wiederverwendung durch dasselbe Programm. In meinem Programm laufen malloc und free auf verschiedenen Threads. Dies ist ein Speicherverwaltungsproblem, wenn malloc viel häufiger als kostenlos aufgerufen wird und das Prozessdatensegment sehr groß wird und das Betriebssystem Seiten auf die Festplatte auslagert. Dadurch werden das Programm und das Betriebssystem langsam und reagieren nicht mehr. Gibt es eine Möglichkeit für das Betriebssystem, freigegebenen Speicher zurückzugewinnen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage