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.
%
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
01-.tar格式
解包:[*******]$ tar xvf FileName.tar
打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)
02-.gz格式
解压1:[*******]$ gunzip FileName.gz
解压2:[*******]$ gzip -d FileName.gz
压 缩:[*******]$ gzip FileName
03-.tar.gz格式
......
linux/arch/i386/boot/compressed/head.S
在setup()结束后,此函数就被移动到物理地址0x00100000处或者0x00001000处,这取决于内核映像是被高装载到ram中还是低装载到ram中。
解读函数:
startup_32:
cld
cli
&n ......
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、首先是QT4.6的安装,参见QT4.6+QT Creator1.3安装(Linux)
2、再参见Eclipse+Qt4配置步骤(Linux版)
将QT4.6的路径,如:
/opt/qtsdk-2009.05/qt/bin/
3、OK!
4、可以同时使用Eclipse和QT Creator 两个IDE了,呵呵。 ......