当c程序可执行文件a.out正在运行时,RAM中应该有哪些程序元素?程序代码也在吗?如果是的话,它的需求是什么?
答案 0 :(得分:1)
是的,当a.out运行时,代码a.out出现在内存中。指令指针(或寄存器)指向正在存储器中执行的当前操作,并且大多数操作也将指令指针前进到下一个操作。虽然,如果通过代码你的意思是原始的C代码,情况并非总是如此 - 只有组装的可执行字节码必须在内存中。编译器/链接器有一些标志,用于在汇编的输出可执行文件中包含C代码,以便于调试。
如果我们谈论进程的虚拟内存空间,这还将包括一些内存映射的io寄存器,一些内核空间函数以及程序所需的任何库(至少用于一般类型操作的libc) )。
答案 1 :(得分:0)
原则上,机器代码在进程的地址空间内,并且经常在RAM中。但是,有些情况下机器代码还没有在RAM中,并且内核必须从磁盘加载它。这是透明的,因为virtual memory。具体来说,execve(2)系统调用为ELF可执行二进制文件中的各个段设置内存映射,就像mmap(2)一样(它是系统调用,munmap
和{ {1}}更改内存映射。)
查看流程1234的mprotect
以了解更多信息,或者直接运行
/proc/1234/maps
获取正在运行 cat /proc/self/maps
的进程的内存映射。
答案 2 :(得分:0)
Is program code also there?
是的,您的程序代码也将在RAM中
实际上任何c程序都有内存中的主要3段
* Data Segment
* Code Segment
* Stack and Heap areas
您的代码进入代码段
请参阅This article