は、Windowsでの単純なD /タンゴコードです:mallocとD/Tangoでメモリを解放しないで無料ですか?ここ
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);
}
、私はプログラムを実行すると、メモリが低〜2メガバイトのままで、私は、ポインタのメモリ使用量を100メガバイトの配列を割り当てるとき〜100メガバイトにジャンプそれは問題ありません。しかし、空きメモリがまだ(私はタスクマネージャを見ている)の後に100MBのプログラムの最後に。
は、私はそれがWindowsのページファイルのキャッシュか何かになるかもしれないと思ったので、私は、単純なC++のプログラムを試してみた:#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;
}
私は++グラムでそれをコンパイルしたし、すべてがそれが必要のように動作するようです。プログラムが起動するとき - メモリ使用量〜900kb、割り当て後〜100MB、フリー後〜1,2MB ...
どうしたのですか、これはバグですか?
mallocとfreeは、C呼び出しのラッパーです。なぜ結果が違うのか分かりません。 –
よろしく! //私の名前はmallocで、私は悪いラッパーです。 //私に「mem'ry」と言ってください、私はそれを泥棒に投げます。 – Baxissimo