2017-06-22 27 views
3

現在、Kip Irvineの「アセンブリ言語for x86プロセッサ」に従ってアセンブリプログラミングを学習しています。 3.4.12節では、初期化された配列と初期化されていない配列が占めるメモリの見方

.DATA?ディレクティブは、初期化されていないデータを宣言しています。 大きなブロックの初期化されていないデータを定義すると、.DATA?ディレクティブは、コンパイルされたプログラムのサイズを に縮小します。私が見たいと思って

.data 
smallArray DWORD 10 DUP(0) ; 40 bytes 
bigArray DWORD 5000 DUP(?) ; 20,000 bytes 

.data 
smallArray DWORD 10 DUP(0) ; 40 bytes 
.data? 
bigArray DWORD 5000 DUP(?) ; 20,000 bytes, not initialized 

次のコードは、他の一方で、コンパイルされたプログラムに 2万バイトより大きいを生成します。たとえば、次のコードは、 が効率的に宣言されていますプログラムがコンパイルされた後の各バージョンのコードのメモリフットプリントは、.data?の影響を自分で見ることができますが、どうすればよいのか分かりません。私はプログラムのコンパイル後のコードの各バージョンのメモリフットプリントを見たい

+2

リンクマップにレイアウトされています。 **および** ml.exeでリンクする場合は/ Fmスイッチを、link.exeを使用して別の手順でリンクする場合は/ linkを使用してください。 –

+1

[* Very *同様の質問](https://stackoverflow.com/questions/7137049/how-does-masm-data-directive-work-internally);私はこれらの2つを組み合わせ、この情報を複製して1つの場所に情報をまとめておくことを検討しています。 –

+0

@CodyGray私はあなたに同意します、彼らは確かに非常に似ています – Thor

答えて

4

...

の違いは、メモリ内の画像のコンパイルされた実行可能ではなく、サイズの大きさでありますそれが実行されているとき。

簡潔に言えば、ほとんどの最新のオペレーティングシステムでは、実行可能ファイルがメモリ領域を「ゼロ充填」として宣言する方法があります。実行可能ファイルは、領域の大きさを表すだけでよいので、その領域にリテラルゼロの束が含まれている場合よりもはるかに小さくなります。

+0

hi duskwuff、あなたのプロフィールの写真でゴールデンレトリーバーを愛し、私もゴールデンレトリバーを持っています:) – Thor

関連する問題