hier ist ein einfacher d/Tango-Code in den Fenstern:malloc und frei in D/Tango Speicher nicht freigeben?
module d_test.d;
import tango.util.log.Trace;
import tango.core.Thread;
import tango.stdc.stdlib : malloc, free;
void main() {
Trace.formatln("Checking in...");
Thread.sleep(10);
int total_n = (100 * 1000 * 1000)/int.sizeof; // fill mem with 100MB of ints
int* armageddon = cast(int*)malloc(total_n * int.sizeof);
for(int i = 0; i < total_n; ++i) {
armageddon[i] = 5;
}
Trace.formatln("Checking in...");
Thread.sleep(10);
free(armageddon);
armageddon = null;
Trace.formatln("Checking in...");
Thread.sleep(10);
}
, wenn ich das Programm ausführen, Speicher niedrig bleibt ~ 2MB, und wenn ich ein Array von 100 MB auf die Zeiger Speichernutzung zuteiles springt auf ~ 100 MB, was in Ordnung ist. Nach dem freien Speicher ist jedoch immer noch (ich schaue auf Task-Manager) bei 100 MB bis zum Ende des Programms.
Ich dachte, es zu Windows Auslagerungsdatei Cache oder etwas sein könnte, also habe ich ein einfaches C++ Programm versucht:
#include <iostream>
#include <windows.h>
using namespace std;
int main() {
Cout << "Checking in..." <<< endl;
Sleep(10000);
int total_n = (100 * 1000 * 1000)/sizeof(int);
int* armageddon = (int*)malloc(total_n * sizeof(int));
for(int i = 0; i < total_n; ++i) {
armageddon[i] = 5;
}
Cout << "Checking in..." <<< endl;
Sleep(10000);
free(armageddon);
armageddon = NULL;
Cout << "Checking in..." <<< endl;
Sleep(10000);
return 0;
}
Ich habe es mit g ++ kompiliert und alles scheint, wie es sollte zu funktionieren. Wenn das Programm startet - Speicherverbrauch ~ 900kb, nach Zuteilung ~ 100MB, nach freiem ~ 1,2MB ...
Also, was mache ich falsch oder ist das ein Fehler?
malloc und kostenlos sind nur Rapper für die C-Anrufe. Ich weiß nicht, warum die Ergebnisse anders sein würden. –
Yo yo! // mein Name ist malloc und ich bin ein böser Rapper. // Gib mir alle deine Erinnerungen, und ich werde es in den Crapper werfen – Baxissimo