3

かなりの数の静的に定義された変数を持つプログラムがあります。main にブレークポイントを設定して GDB で起動し、pmap を実行すると、約 100MB のデータが既に割り当てられていることがわかります。

08838000 107576K rw---    [ anon ]

私はすでに巨大な静的に定義された配列 (例えば 200,000 int) を持つ関数の山を見つけ、それらを見つけたのでそれらを取り除きました。

ヒープ/データ セグメント上にある最大のアイテムを調べる方法はありますか? GDBまたは他の手段のいずれかで?

4

1 に答える 1

5

この情報は、nm(1) などのオブジェクト コード検査ユーティリティを使用して見つけることができます。

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

また、objdump は、十分なデバッグ情報があれば、完全にリンクされたプログラムに関する追加の洞察を提供できます。

ユーティリティはターゲット プラットフォーム固有であることが多いため、クロスコンパイルする場合は、正しいプログラムを使用するように注意する必要があります (つまりx86_64-linux-gnu-gcc-nm、単なる ではなく のようなものnm)。

于 2012-07-23T14:26:14.383 に答える