这是 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(我正在查看任务管理器)。
我以为可能是 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;
}
我已经用 g++ 编译了它,一切似乎都像它应该的那样工作。程序启动时 - 内存使用量~900kb,分配后~100MB,释放后~1,2MB ...
那么,我做错了什么还是这是一个错误?