我有一个程序,它有大量静态定义的变量。如果我在GDB中启动它,在main中有一个断点,然后运行pmap,我看到已经分配了大约100MB的数据:
08838000 107576K rw--- [ anon ]
我已经发现了一堆具有巨大静态定义数组的函数(例如200,000英寸)并且在我找到它们时将它们删除了。
有没有办法找出堆/数据段上最大的项目是什么?在GDB中还是通过任何其他方式?
答案 0 :(得分:5)
可以使用目标代码检查实用程序(如nm(1):
)找到信息nm --size-sort <object-file.o>
此外,如果有足够的调试信息,objdump可以为完全链接的程序提供额外的见解。
实用程序通常是特定于目标平台的,因此在进行交叉编译时必须注意使用正确的程序(例如x86_64-linux-gnu-gcc-nm
而不仅仅是nm
)。