Re: [问题] Memory Usage

楼主: Usoul   2012-03-02 18:45:58
有鉴于大家对于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 为准。
作者: craig08 (小佑)   2012-03-03 14:10:00
推助教~
作者: fu3mo6 (ㄚ庞)   2012-03-03 20:04:00
所以totalstart和gettotal..两个都不需要用到吗?
楼主: Usoul   2012-03-03 21:04:00
在本次作业中确实不需要用到。
作者: Nien1027 (随便)   2012-03-03 21:13:00
感谢助教!!
作者: anfranion (南‧生命的意義是經歷)   2012-03-05 16:17:00
话说输出的单位是MB吗? spec.上好像是kb...
楼主: Usoul   2012-03-06 00:35:00
啊,这点是我疏忽了。已改成KB,以免造成没注意到这篇文的人会有不同的结果

Links booklink

Contact Us: admin [ a t ] ucptt.com