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