当C程序被编译并创建目标文件(ELF)时,目标文件包含不同的段,例如bss、data、text和其他片段。我理解这些ELF的节是虚拟内存地址空间的一部分。如果我理解有误,请纠正我。
此外,编译后的程序将与虚拟内存和页表相关联。页表将ELF中存在的虚拟内存地址与加载程序时的实际物理内存地址关联起来。我的理解正确吗?
我读到在创建的ELF文件中,bss部分只保留未初始化全局变量的引用。这里的未初始化全局变量是指在声明时未初始化的变量?
另外,我读到局部变量将在运行时(即堆栈中)分配空间。那么它们在目标文件中如何被引用?
如果程序中有特定的代码段可用于动态分配内存,那么这些变量将如何在目标文件中被引用?
我对目标文件的这些不同段(如text、rodata、data、bss、stack和heap)是否都是物理内存(RAM)的一部分,即所有程序执行的地方感到困惑。
但是我感到我的理解是错误的。当一个进程或程序正在执行时,这些不同的段与物理内存的关系如何?