私が作業しているネイティブC++アプリケーションは、自分のコードに入る前からかなり大きなメモリフットプリント(20MB)があることに気付きました。ネイティブアプリの初期メモリフットプリントが大きい
(私はそれが最も有用なメトリックであると理解していますが、私はWindowsの「プライベートバイト」メジャーを参照しています)。それはそれに到達したとき、私は「メイン()」機能と案の定の最初の行にブレークポイントを配置した
は、フットプリントは20メガバイトです。
EXEのサイズはわずか2メガですので、それを考慮しません。
また、私は故意に原因ではなかったことを証明するために、すべてのDLLを意図的に削除しました。期待どおり、 "Dll not found"メッセージが表示されますが、フットプリントはまだ20MBです!
それで、私は恐らくそれが原因であった静的に初期化されたオブジェクトであるかもしれないと思った。
「new」と「malloc」の両方にブレークポイントを追加しました。最初のヒット時(最初の静的イニシャライザーの場合)、メモリーはすでに20MBです。
私はこの記憶を食べているものをどのように診断することができますか?
それはいつも新しい/ malloc関数パラダイムの外のメモリのようですので、私はデバッグする方法を理解するのに苦労しています。
乾杯、
ジョン
アプリケーションについてもう少し知ることができます。あなたはあなたですか?静的データを使用しますか? – lothar
あなたは「すべてのDLLを削除しました」と言います。しかし、あなたはまだシステムDLLを使っていますよね?それが問題ではないと確信していますか?場合によっては、Windowsがアプリケーション用のDLLのプライベートコピーをロードする必要があります(http://msdn.microsoft.com/en-us/library/ms811694.aspx#dlldanger1_topic2を参照)。 –
私はかなりの場所で静的データを使用していますが、静的データが初期化される前にメモリフットプリントがあることを確かめています( "malloc"と "新しい"ブレークポイントから分かるように)。 メモリを使用している静的な第三者のライブラリの提案は、私にとって最も犯しやすい原因のように聞こえます。 私は本当に大量のサードパーティの静的ライブラリ(openssl、sqlite、crypto ++などを含む)を使用しています。誰も私がどのように(もしあれば)これらの食べ物をメモリ上に確立できるかについての提案はありますか? – John