2017-11-30 20 views
1

私はプログラムのメモリ使用量を減らそうとしていますが、手動で見つけたのは150要素を割り当てる配列でしたが、最初の3要素だけが実際に使用されました。GDBで未使用のメモリ領域を発見することは可能ですか?

私はGDBがどのメモリ領域が割り当てられているかを分析することができますが、実際にプログラムの実行中に実際には読んでいない方法があるのか​​疑問に思っていました。プログラムはC言語になっているので、GCCフラグも歓迎します。

答えて

0

実際に未使用のメモリを検出したい場合は、少なくともメモリへの書き込みアクセスを取得するハードウェアデバッガのサポートが必要です。

GDBにはハードウェアサポートが組み込まれていないため、検出できません。しかし、変更されたメモリを検出しようとすることができます。この目的のために、(プログラム/関数/スニペット/これまでの)実行される前のパターンでメモリを割り当て、データパターンがどこで修正されているかを確認することができます。これは、例えば、使用されているスタックの最大サイズを検出します。あなたのプログラムをテストした後、あなたは満たされたメモリ領域を調べることができ、最初のミスマッチが見えるときは良い推測があります。

警告!このメソッドは、すべてのメモリの変更を検出しません。プログラムは、あなたが "未使用メモリ"としてマークしたデータパターンを書き込むことができます。だから、良いパターンを選ぶと助けになります。プログラムでゼロをメモリに書き込む可能性が高いため、 "all zero"パターンは弱いです。しかし、0xdeadbeafのシーケンスがより賢明かもしれません。

関連する問題