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

Memory 初学者汇编程序内存使用问题,memory,assembly,Memory,Assembly,我最近参加了一些集会,它很有趣,因为它挑战了我所学到的一切。我想问几个问题 运行可执行文件时,是否将整个可执行文件加载到内存中 通过一点摆弄,我发现常数并不是真正的常数?它只是一个编译器的东西吗 const int i=5 \u asm{mov i,0}//i现在为0,编译良好 那么,是否所有变量都被赋予了一个嵌入到文件中的常量值? 意思是: inta=1 const int b=2 void某物() { 常数int c=3; int d=4; } 我会在文件中找到所有这些变量吗(在十六进制编辑

我最近参加了一些集会,它很有趣,因为它挑战了我所学到的一切。我想问几个问题

  • 运行可执行文件时,是否将整个可执行文件加载到内存中

  • 通过一点摆弄,我发现常数并不是真正的常数?它只是一个编译器的东西吗

  • const int i=5

    \u asm{mov i,0}
    //i现在为0,编译良好

    那么,是否所有变量都被赋予了一个嵌入到文件中的常量值? 意思是:

    inta=1

    const int b=2

    void某物()
    {
    常数int c=3;
    int d=4;
    }

    我会在文件中找到所有这些变量吗(在十六进制编辑器或其他地方)

  • 如果将可执行文件加载到内存中,那么“常量”在技术上是否使用内存?我在网上读到很多人说常数不使用内存,这是真的吗
  • 当可执行文件启动时,可执行文件的文本(即代码)和数据段会映射到进程的虚拟地址空间,但在访问这些内存位置之前,字节可能不会从磁盘中实际复制。看

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

  • 常数会占用内存的某个地方——如果程序中有常数42,那么内存中一定有存储42的地方,即使这意味着它存储为立即模式指令的参数


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

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

    const char*
    aka C字符串,通常由编译器来保存内存