我目前正在学习汇编编程,遵循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
另一方面,以下代码生成一个已编译的程序 20,000字节更大:
.data smallArray DWORD 10 DUP(0) ; 40 bytes bigArray DWORD 5000 DUP(?) ; 20,000 bytes
我希望在编译程序后看到每个版本代码的内存占用,所以我可以看到.data?
对我自己的影响,但我不确定它是如何完成的。< / p>
答案 0 :(得分:4)
我希望在编译程序后看到每个版本代码的内存占用...
不同之处在于编译后的可执行文件的大小,而不是其执行时内存中图像的大小。
简而言之:大多数现代操作系统都有一种方法可执行文件将内存区域声明为&#34;零填充&#34;。可执行文件只需要说明该区域有多大,所以它比它包含该区域的一堆文字零要小得多。