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

在上面编译完成后,就会有一个报告说明有内存泄露,并指明泄露的内存大小数量。当然,这个工具还有更细粒度的内存检测控制,这个在后面会继续分析说明。

四、总结

这里只是对这再从个工具一个基础的介绍和学习,在后面会展开详细的说明,俗话说得好“工欲善其事,必先利其器”。会用工具,用好工具,对排疑解难,提高性能,有着重要的好处。

经验分享 程序员 微信小程序 职场和发展