これがWindowsの簡単な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);
}
プログラムを実行すると、メモリは約2MBの低さを維持し、100MBの配列をポインタに割り当てると、メモリ使用量は約100MBに跳ね上がります。これは問題ありません。ただし、空きメモリが残った後(私はタスクマネージャを見ています)、プログラムの最後まで100MBです。
私はそれがウィンドウズのページファイルキャッシュか何かにあるかもしれないと思ったので、私は単純な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;
}
私はそれをg++でコンパイルしましたが、すべてが正常に機能しているようです。プログラムの起動時-メモリ使用量〜900kb、割り当て後〜100MB、空き後〜1.2MB ..
それで、私は何を間違っているのですか、それともこれはバグですか?