有鉴于大家对于tm_usage中的memory usage有众多疑问,在此做统一回答。
测试过程:
以 demo/src/main.cpp 为例:
tmusg.periodStart();
...
(即将插入测试程式码)
tmusg.getPeriodUsage(stat);
...
cout << stat.vmSize / 1024.0 << "MB" << endl; // print current memory
cout << stat.vmPeak / 1024.0 << "MB" << endl; // print peak memory
cout << stat.vmDiff / 1024.0 << "MB" << endl;
测试0: 什么都不做的情况下
11.2969MB
11.2969MB
0.00390625MB
测试1: 加入int test[1000000];
15.0391MB
15.0391MB
0.00390625MB
由测试0&1之差别,我们可以发现 (15.0391-11.2969)x1024x1024/4 ~= 1000000
测试2: 加入int* test; test = new int[1000000];
15.1133MB
15.1133MB
3.82031MB
测试3: 加入int* test; test = new int[1000000]; delete test;
11.2969MB
15.1094MB
0.00390625MB
由以上四个测试,我们可以得到以下结论:
1. 程式在执行前,系统会先给予一块足够的内存,并且某些情况下不需要再增加。
这就是为什么 Craig 的测试会发现 vmDiff 并没有变化的原因。
2. 在使用 pointer 时,系统并不会预估 new 出的内存大小,而会动态给予内存。
因此,这时候 vmDiff 就有用武之地了。
以上分析都不重要,大家只需要知道一件事。
本次作业的 memory usage ,请在 main.cpp 中使用以下模板:
tmusg.periodStart();
... (这里就是许多sorting的程式码)
tmusg.getPeriodUsage(stat);
cout << stat.vmPeak << "KB" << endl;
其中 tmusg.XXX 的位置都不要动,只需要在 main return 出去前,
加上那一行 stat.vmPeak 即可。
本次作业之 memory usage ,就以输出之 stat.vmPeak 为准。