3

我有一个程序,其中包含大量静态定义的变量。如果我在 GDB 中启动它,在 main 中有一个断点,然后运行 ​​pmap,我看到已经分配了大约 100MB 的数据:

08838000 107576K rw---    [ anon ]

我已经找到了一堆函数,它们具有巨大的静态定义数组(例如 200,000 个整数),并在我找到它们时将它们删除。

有没有办法找出堆/数据段上最大的项目是什么?在 GDB 中还是通过任何其他方式?

4

1 回答 1

5

可以使用 nm(1) 等目标代码检​​查实用程序找到该信息:

nm --size-sort <object-file.o>

此外,如果有足够的调试信息,objdump 可以为完全链接的程序提供额外的见解。

这些实用程序通常是特定于目标平台的,因此在交叉编译时必须注意使用正确的程序(即类似的东西x86_64-linux-gnu-gcc-nm而不是 just nm)。

于 2012-07-23T14:26:14.383 回答