时间的测量

1
2
3
4
5
6
7
8
9
10
11
#include <chrono>

int main(){
Timer t;
t.start();
t.stop();
cout << t.seconds() << endl;
t.reset();
t.start();
t.stop();
}

但是多次查看系统时间会导致程序明显变慢

常用的工具 profiling tools

perf 指令会显示某些节点花费的时间、cpu占用等性能
或者在linux 下,可以考虑使用 time prog 指令,该指令会在命令行输出一行 后面的prog 内容加上 各个部分占用的时间以及cpu占用量

1
1.60s user 0.03s system 95% cpu 1.711 total
  • user: 程序占用时间
  • system: 系统执行该程序使用的额外时间
  • elapsed: 从开始打表到结束打表所经过的时间差,会包含期间其他进程占用的时间
  • cpu: 程序的 cpu 占用量,计算公式 user+system/elapseduser + system / elapsed

内存分配工具 valgrind

指令 valgrind ./prog -args 如果使用flag --leak-check=full --show-leak-kinds=all 就会详细的查找所有种类的内存泄漏可能
如果想要查看泄漏的原因,通过 -g3 将调试模式开到最大档之后来检查泄漏的原因,得到的信息可能会更加丰富

exit()指令和内存销毁

对于一个良好的 STL 容器,一般会自带内存申请和销毁的工具,但是如果在使用 exit 的时候有某些 容器已经拥有一定的数据,这样程序会直接退出而不会调用其析构函数,从而导致内存泄漏,所以使用exit的时候一定要注意是否有容器有数据残留