C++性能测试工具gprof和gperftools基础
一、程序的性能及测试
二、gprof和gperftools的说明
一般来说,在cc++中,常用的性能测试工具中,gprof和gperftools是经常被提到和使用的。gprof是GCC自带的性能测试工具,而gperftools是Google的一个性能测试工具。下面对二者进行基本的说明。 1、gprof GNU profile,是GNU编译器工具包的一种性能分析工具,它能够准备的对函数调用的时间、次数以及相应关系进行描述和说明,还可以通过使用gprof2dot这个工具把结果直接展示为图形状态。它可以分为以下几步进行使用: a、在编译测试程序时打开编译开关 -pg b、运行程序并正常运行完成 c、使用gprof命令来分析运行生成的gmon.out,生成性能测试结果的报告 2、gperftools gperftools包括四个工具,即CPU profiler (CPU运行时间探测分析)、Heap Checker(内存检测) 、Heap Profiler(内存监控器) 及tcmalloc(内存管理库)。对CPU和内存泄露的检测一直是CC++的一个痛点,Google提供这再从个方面的工具真是太及时了。 这个软件需要安装下载,同样在编译时也要链接到相关的库,会在后面的文章中专门分析说明。需要说明的是在这个工具中提供了对不间断运行的应用程序(比如后台服务)的测试,可以通过信号指令来启动或者关闭相关的测试过程,如"kill -s SIGUSR1 进程ID".
三、应用
这里给出基本的例程: 1、gprof
//testgprof.cpp #include<iostream> int main(void) { std::cout << "start test------!" << std::endl; int64_t d = 0; for (int i = 0; i < 1000000000; i++) { d += i; } std::cout << "result is:" << d << std::endl; std::cout << "end test!" << std::endl; return 0; } //编译 g++ -pg testgprof.cpp -o tgprof //运行这个命令后可以在屏幕上看到相关的分析 gprof tgprof gmon.out
当然此处也可以使用上面提到的gprof2dot显示,但需要安装一系列的依赖库和相关软件。
2、gperftools
void TestLeakMem() { int* p = new int[100]; char* tmp = new char[100]; delete[] p; //delete [] tmp; } int main(void) { TestLeakMem(); return 0; } //编译 g++ -O0 -g testmem.cpp -ltcmalloc -o testmem
在上面编译完成后,就会有一个报告说明有内存泄露,并指明泄露的内存大小数量。当然,这个工具还有更细粒度的内存检测控制,这个在后面会继续分析说明。
四、总结
这里只是对这再从个工具一个基础的介绍和学习,在后面会展开详细的说明,俗话说得好“工欲善其事,必先利其器”。会用工具,用好工具,对排疑解难,提高性能,有着重要的好处。