如何统计各个全局变量的内存占用情况

cphj 2009-11-24 02:43:44
file.h中声明全局变量
extern Data data[MAX_A][MAX_B];
extern Buffer buf[MAX_C][MAX_D];
...
...

file.c中定义全局变量
Data data[MAX_A][MAX_B];
Buffer buf[MAX_C][MAX_D];
...
...

现在需要扫描代码文件,统计各个全局变量的内存占用,有什么好方法?

我现在能想到的是读代码文件,解析出全局变量,然后生成一个.cpp文件,内容是:
cout << sizeof(data) << endl;
cout << sizeof(buf) << endl;
...
...

然后把原来的代码和新的.cpp一起编译,再运行获得结果
比较麻烦的是,需要一些手工操作步骤,以后代码更新了,每次都要来一遍

动手之前,先问问各位,有没有其他更好的方法,或者现成的工具最好(注:必须是免费或自由软件,公司禁止用盗版)

多谢!
...全文
749 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
netxuning 2009-11-25
  • 打赏
  • 举报
回复
学习,帮顶!
cphj 2009-11-25
  • 打赏
  • 举报
回复
谢谢各位

看来我没有把问题说清楚,补充一些问题背景吧

系统有十多个模块,内存基本已满(非PC应用)
现在针对其中一个模块做试点搞优化
该模块的核心数据使用大量多维全局静态数组存储,但仅限于该模块访问
现在想统计各个全局变量(注意不是全部的,也不是按文件,是按变量实体),占用的内存,找出占用最多的几个,用动态数组来替代
这样修改的代码量较小
cphj 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 delphiwcdj 的回复:]
没有想到好的办法,如果开始的时候就把所有全局变量分别放在一个单独的文件里就好了。
[/Quote]

实际是放在一个文件里面的,声明集中于某个.h文件,定义集中于某个.c文件,请问有什么好办法?
desdouble 2009-11-24
  • 打赏
  • 举报
回复
linux下找ELF文件的symbol table。也可以参考readelf。
PE格式不清楚,应该也有符号表之类的东东吧?
cattycat 2009-11-24
  • 打赏
  • 举报
回复
话说全局变量的内存不是早就分配好了么,估计你说的是在数据段上实际分配的吧,你得看一下目标代码生成,了解下bss,data段内容如何存放,编译器最后怎么优化,看程序中具体使用了多少,没用的自己可以先减少分配大小。
beginnow 2009-11-24
  • 打赏
  • 举报
回复
从PE文件中读取.bss、.rdata、.data 应该是你要统计的东西
xmrforever 2009-11-24
  • 打赏
  • 举报
回复
学习
lingling1989r 2009-11-24
  • 打赏
  • 举报
回复
mark~~~
delphiwcdj 2009-11-24
  • 打赏
  • 举报
回复
没有想到好的办法,如果开始的时候就把所有全局变量分别放在一个单独的文件里就好了。
cphj 2009-11-24
  • 打赏
  • 举报
回复
如果能顺便一起统计静态变量那更好,没有也行

统计这个,是为了做代码优化,就是因为原来的代码全局变量太多,需要分别统计各个全局变量的内存使用,然后确定重构方案
delphiwcdj 2009-11-24
  • 打赏
  • 举报
回复
这么多全局变量啊,为什么会有这样的需求
qqwx_1986 2009-11-24
  • 打赏
  • 举报
回复
只需要全局吗,静态的不用考虑?
shenxf_1982 2009-11-24
  • 打赏
  • 举报
回复
up,xuexi
cphj 2009-11-24
  • 打赏
  • 举报
回复
全局变量很多,file.c里面有上百个,需要自动化统计
pady_pady 2009-11-24
  • 打赏
  • 举报
回复
MAX_A * MAX_B * sizeof(Data);
MAX_C * MAX_D * sizeof(Buffer);

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧