初学者汇编编程内存使用问题

时间:2010-03-22 06:08:23

标签: memory assembly

我最近进入了一些集会,它很有趣,因为它挑战了我所学到的一切。我想知道我是否可以提出几个问题

  1. 运行可执行文件时,整个可执行文件是否会加载到内存中?

  2. 从一点点摆弄我发现常量不是真正的常量?它只是一个编译器吗?

  3. const int i = 5;

    _asm { mov i, 0 } //我现在为0并且编译得很好

    所有变量都分配了一个嵌入到文件中的常量值吗? 含义:

    int a = 1;

    const int b = 2;

    void something() { const int c = 3; int d = 4; }

    我是否会在文件中找到所有这些变量(在十六进制编辑器或其他内容中)?

    1. 如果可执行文件被加载到内存中,那么“常量”在技术上是使用内存吗?我已经在网上读到人们说常量不使用内存,这是真的吗?

2 个答案:

答案 0 :(得分:2)

  1. 当可执行文件启动时,您的可执行文件(即代码)和数据段会映射到进程的虚拟地址空间,但在访问这些内存位置之前,实际上可能无法从磁盘复制这些字节。请参阅http://en.wikipedia.org/wiki/Demand_paging

  2. C语言常量实际存在于内存中,因为您必须能够获取它们的地址。 (即&i。)常量通常位于可执行映像的.rdata段中。

  3. 一个常量会在某个地方占用内存 - 如果你的程序中有一个常数42,则必须在内存中存储42的地方,即使这意味着它存储为参数立即模式指令。

答案 1 :(得分:1)

操作系统加载代码和数据段,以便为执行做好准备 如果可执行文件具有资源段,则应用程序会根据需要加载部分资源段。

确实const变量占用了内存空间但编译器 free 以优化
用于内存使用和代码大小,并将其值嵌入代码中 (如果他们没有检测到这些变量的任何地址引用)

const char *又名C 字符串,通常由编译器interned来节省内存。