如何查看已初始化数组与未初始化数组占用的内存?

4

我目前正在学习汇编语言编程,参考了Kip Irvine的《x86处理器汇编语言》。在第3.4.12节中,作者如下所述:

The .DATA? directive declares uninitialized data. When defining a large block of uninitialized data, the .DATA? directive reduces the size of a compiled program. For example, the following code is declared efficiently:

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

The following code, on the other hand, produces a compiled program 20,000 bytes larger:

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

我希望在程序编译后能看到每个版本代码的内存占用情况,这样我就可以亲自看到.data?的影响,但我不确定如何做到。


2
它在链接映射中布置。如果使用 ml.exe 进行编译和链接,请使用 /Fm 开关,或者如果使用 link.exe 进行单独的链接步骤,请使用 /link。 - Paul Houle
1
非常相似的问题;我正在考虑将这两个问题合并,并将此问题标记为重复,以便将信息集中在一个地方。 - Cody Gray
@CodyGray 我同意你的观点,它们的确非常相似。 - Thor
@CodyGray:将另一个问题标记为此问题的重复,因为此问题现在有了更详细的答案。 - Peter Cordes
1个回答

5
我希望在程序编译后能够查看每个代码版本的内存占用情况...
区别在于编译后可执行文件的大小,而非它在执行时所占用的内存图像大小。
简而言之:大多数现代操作系统都有一种方法,使可执行文件能够声明一个内存区域为“零填充”。可执行文件只需要说明该区域的大小,因此比包含该区域的字面零值要小得多。

嗨,duskwuff,我喜欢你个人资料图片中的金毛猎犬,我也有一只金毛猎犬 :) - Thor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接