前些天在寻找优化C语言内存占用的方法时看到了一篇文章觉得很好,链接http://blog.jobbole.com/57822/,
其中提到了一个工具pahole挺好用,所以网上搜索一番,安装上体验了一下,挺实用的东西。
pahole可以用来检查结构体中的内存漏洞,可以作为内存优化的一个工具。
我是在ubuntu上安装的,其他linux系统应该差不多。
1.下载pahole源码:https://github.com/jmesmon/pahole
也可以去我的资源下载:http://download.csdn.net/detail/mynameislu/7195913,其中包含了pahole、libebl-dev和libz
解压后查看README文件进行安装
2.安装pahole
我在安装pahole时缺了以下几个东西
cmake ----------->sudo apt-get install cmake
libdw-dev --------->sudo apt-get install libdw-dev
libebl-dev --------->这个用apt-get没有找到,所以上网找了个.deb文件安装的https://launchpad.net/ubuntu/hardy/i386/libebl-dev/0.131-3。
libz ----------->下载源码包,解压之后分别运行configure、make、make install即可。
上述内容安装完成后,进入pahole的源码目录。
cd pahole-master
mkdir build
cmake -D__LIB=lib ..
sudo make install
然后就完成安装了,默认安装到了/usr/local/目录下。
3.测试
test.c
#include <stdio.h>
typedef struct _st //这个地方必须要有结构体名称,否则pahole找不到结构体。
{
int a_int;
char b_char;
int c_int;
}st;
typedef struct _st2
{
int a_int;
char b_char;
char c_char;
int d_int;
}st2
int main()
{
st t;
st2 s; //需要使用结构体,否则pahole找不到结构体。
return 0;
}
编译test.c 时需要使用-g参数
gcc -g test.c -o test 或者 gcc -g -c test.c 生成test.o
编译完成后
pahole -V test 或 pahole -V test.o
打印出所有结构体的hole情况。
pahole -C _st test 或pahole -C _st test.o
只打印_st结构体的hole情况。
4.本文内容完,有发现比较好的工具的时候希望您能分享。