2017-06-22 74 views
3

我目前通過遵循Kip Irvine的「x86處理器的彙編語言」學習彙編編程。在第3.4.12節中,作者聲明:如何查看初始化陣列與未初始化陣列佔用的內存

.DATA?指令聲明未初始化的數據。定義 大塊未初始化的數據時,.DATA?指令會減小已編譯程序的大小 。例如,下面的代碼是 有效地宣稱:

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

下面的代碼,在另一方面,產生一個編譯程序 20000字節的:

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

我想看程序編譯後每個版本代碼的內存佔用情況,所以我可以看到.data?對我自己的影響,但我不確定它是如何完成的。

+2

它被放置在鏈接圖中。如果編譯**和**鏈接到ml.exe,使用/ Fm開關;如果使用link.exe在單獨的步驟中鏈接,則使用/ link。 –

+1

[* Very * similar question](https://stackoverflow.com/questions/7137049/how-does-masm-data-directive-work-internally);我正在考慮將這兩者結合起來,並將其標記爲重複,以將信息保存在一個地方。 –

+0

@CodyGray我同意你的看法,他們的確非常相似 – Thor

回答

4

我想看到的代碼的每個版本的內存佔用的程序編譯後...

的區別是在編譯的可執行文件,而不是它的圖像的存儲容量的大小當它被執行時。

簡而言之:大多數現代操作系統都有一種可執行程序將內存區域聲明爲「零填充」的方法。可執行文件只需要說明該區域有多大,因此它比包含該區域的一串零字節要小得多。

+0

嗨duskwuff,愛你的個人資料圖片中的黃金獵犬,我也有一個黃金獵犬:) – Thor