Linux学习 寻找程序热点(一):gprof
gprof介绍
gprof是GNU profiler工具,存在于binutils工具包。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。还可以显示“注释的源代码”,是程序源代码的一个复本,标记有程序中每行代码的执行次数。
gprof 实现原理:
gprof并不神奇,在编译和链接程序的时 候(使用 -pg 编译和链接选项),gcc 在你应用程序的每个函数中都加入了一个名为mcount(or“_mcount”, or“__mcount”)的函数,也就是说-pg编译的应用程序里的每一个函数都会调用mcount, 而mcount会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。这张调用图也保存了所有与函数相关的调用时间,调用次数等等的所有信息。
GPROF的基本使用方法如下:
1.使用GCC加上-pg选项编译程序
2.执行程序,会生成gmon.out
3.使用gprof分析gmon.out文件,得出统计资料
4.GPROF不支持动态链接库和多线程
范例:
#include<stdio.h>
void funca()
{
int i = 0;
int n = 0;
for(i = 0;i < 10000000;i++)
{
n++;
n--;
}
}
void funcb()
{
int i = 0;
int n = 0;
for(i = 0;i < 10000000;i++)
{
n++;
n--;
}
}
int main(int argc,char *argv[])
{
int i = 0;
for(i = 0;i < 10;i++)
{
funca();
}
funcb();
return 0;
}
编译:
$ gcc hello.c -pg -o hello
运行:
$ ./hello
生成gmon.out问件
使用gprof进行解析:
$ gprof hello gmon.out -p
Flat profile:
Each sample counts as 0.01 seconds.
%
相关文档:
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
由于Linux不是中国人开发的,开发过程中也不是以中文为母语,虽有中文语言包,在软件兼容性上出现中文乱码也在所难免。我抽取网络上前人的经验,结合自己的理解,将他们加以总结,希望对后来者有所帮助。
1、html文件乱码;
&nbs ......
Red Hat Linux的分区是不同于其它操作系统分区的,它的分区格式只有Ext2(Ext3)和Swap两种,Ext2(Ext3)用于存放系统文件,Swap则作为Red Hat Linux的交换分区。Red Hat Linux至少需要两个专门的分区(Linux Native和Linux Swap)况且不能将Red Hat Linux安装在Dos/Windows分区。一般来说我们将Red Hat Linux安装一个或多 ......
1、首先从http://qt.nokia.com/downloads 下载“Qt SDK for Linux”,包括了QT4.6和QT Creator1.3。 Download Qt SDK for Linux/X11 32-bit** (353 MB)
2、修改文件qt-sdk-linux-x86-opensource-2009.05.bin的属性,让其可执行:
chmod u+x qt-sdk-linux-x86-opensource-2009.05.bin
3、双击qt-sdk-linux- ......
注:以下内容转自:
http://blog.chinaunix.net/u2/81965/showart_1674967.html
国内站点:
ftp://ftp.altera.com/outgoing/release/
http://www.china-vision.net/blog/user1/6/archives/2006/200696114213.html
http://mail.google.com
shao_华恒公司的主页,里面有很多的相关资料,有待大家去发现
......