メモリ内のDLLサイズとハードディスク上のサイズの間には関係がありますか? >モジュール、そして私は、このEXEが使用しているすべてのDLLを見ることができます - 私は、タスクマネージャの拡張機能(MS)を使用しています、と私はリストと右クリックでEXEに行くことができるので、メモリ内のDLLサイズとハードディスク上のサイズ
です。長さの列はありますが、バイト単位ですか? DLLの値(Length)は、ハードディスクの(DLL)サイズとは異なるようです。どうして?
メモリ内のDLLサイズとハードディスク上のサイズの間には関係がありますか? >モジュール、そして私は、このEXEが使用しているすべてのDLLを見ることができます - 私は、タスクマネージャの拡張機能(MS)を使用しています、と私はリストと右クリックでEXEに行くことができるので、メモリ内のDLLサイズとハードディスク上のサイズ
です。長さの列はありますが、バイト単位ですか? DLLの値(Length)は、ハードディスクの(DLL)サイズとは異なるようです。どうして?
関係はありますが、完全には直接的ではありません。
DLLを初めて使用すると、メモリにマップされます。これはメモリにロードされず、必要に応じてロードできる/ロードできるプロセス内にいくつかのアドレス空間を割り当てます。次に、DLLの個々のページがデマンドページングを介してメモリにロードされます。つまり、割り当てられたアドレス空間の一部を参照すると、そのアドレスにマップされたコード(またはデータ)がロードされますそれがまだ記憶されていなければ。
ここで、アドレスマッピングは少しスペース(マップされるアドレス空間のメガバイトごとに1つの4Kページ)を占有します。もちろん、いくつかのデータをメモリにロードすると、それもメモリを使い果たします。
しかし、ほとんどのページはプロセス間で共有することもできるし、5つの異なるプロセスで同時に使用する場合は5回(つまり、それを使用する各プロセスに1回)メモリには物理コピーが1つしか存在しません(少なくとも通常は)。
これらの間で、特定のDLLのメモリ消費量を正確に把握するのは少し難しい場合があります。
が、RAMには==が入ります。 –
@HansPassant: "メモリ内==ランダムアクセスメモリ"?あなたは何を明確にしようとしていますか? –
"in memory"はかなりあいまいな言葉です。 「RAM内」は、「仮想メモリ/アドレス空間内の」別の解釈の1つです。ここでの問題は、Jerryが2つを対比していることです。 – MSalters
「メモリ」とはどのようなものなのでしょうか?また、あなたのTaskManager拡張機能には正確に何が表示されますか。
すべての実行可能モジュール(Exe/Dll)はであり、アドレス空間にが割り当てられています。このマッピングのサイズは、そのサイズと同じです。そして、私はあなたの「拡張機能」があなたに示すものだと思います。
通常、メモリフットプリントはディスクサイズより大きくなります。これは、メモリにマップされているとページが整列しているためです。標準のページサイズは4KBと8KBなので、dllが1KBのコードであれば、まだメモリに4KBを使用します。
.dllや.exeをメモリにコピーして実行するとは思わないでください。
ローダーのための一連の指示と考えることができます。 確かに、プログラムと静的データのテキストが含まれています。 もっと重要なのは、そのテキストが再配置され、満たされていないすべての参照が接続され、他のモジュールが必要とする可能性のある参照をエクスポートできるようにするためのすべての情報が含まれていることです。
デバッグ用のシンボルと行番号の情報がある場合は、まだそれ以上のテキストです。
一般に、メモリイメージよりも大きいと予想されます。
メモリ内のDLLのサイズを決定する際に遊びに来て二つの部分があります。
.bss
セグメントの領域が割り当てられ、一般的にこれは小さく、ページアライメントには欠けていますが、dllに巨大な静的バッファが含まれていると、仮想化されたサイズになってしまいます。ポイント#2は面白いです。私はもっと知りたいです。あなたはこれを読むための参照がありますか? –
@AndréCaron:そのわずかなコンパイラ/実装固有なので、私が与えることができるのはウィキペディアのリンクです:http://en.wikipedia.org/wiki/.bss – Necrolis
dllが動的割り当てを実行する場合は、そのDLLをインクルードしようとしていますか? –
例を挙げることができますか? 「長さ」列はファイルサイズよりも小さいですか?より大きい? 4Kの次の倍数に切り上げましたか? 2つの数字の間にはどんな関係がありますか? –
@Andre:例を挙げると、TMExtentionのディスク上のMSVCR80は632565バイトで、634880が表示されます。また、TAExtentionは、長さの異なるMSVCP71.dllのコピーを2つ表示しました。 1つは503808で、もう1つは352256で、ディスク上では実際には503808です(TMExtentionにリストされているものと同じです)。 – Gob00st