【问题标题】:How to see the memory occupied by initialised array vs uninitialised array如何查看初始化数组与未初始化数组占用的内存
【发布时间】:2017-11-25 01:51:42
【问题描述】:

我目前正在按照 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?的效果,但不知道怎么弄。

【问题讨论】:

  • 它在链接地图中列出。如果编译 并且 使用 ml.exe 链接,则使用 /Fm 开关,如果使用 link.exe 在单独的步骤中链接,则使用 /link。
  • Very similar question;我正在考虑将这两者结合起来,并将其标记为重复,以便将信息集中在一个地方。
  • @CodyGray 我同意你的观点,它们确实非常相似
  • @CodyGray:将另一个标记为这个的副本,因为这个现在有一个更详细的答案。

标签: arrays assembly x86 masm irvine32


【解决方案1】:

我想看看程序编译后每个版本代码的内存占用情况……

区别在于编译后的可执行文件的大小,而不是执行时它在内存中的映像大小。

简而言之:大多数现代操作系统都有一种方法可以让可执行文件将内存区域声明为“零填充”。可执行文件只需要说明该区域有多大,因此它比包含该区域的一堆文字零要小得多。

【讨论】:

  • 嗨黄昏,喜欢你头像中的金毛猎犬,我也有一只金毛猎犬 :)
猜你喜欢
  • 2020-10-24
  • 2011-06-02
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多