如果这个问题被认为太琐碎,我提前道歉,但我确实花了很多时间试图在网上找到一个直截了当的答案,但找不到。
我最近读了一个关于程序分段的介绍性编程课程,以及程序通常如何划分为“段”,这些“段”在需要时单独加载到内存中(或部分加载到内存中,通过分页......我认为)。我们的书提到程序通常根据逻辑划分被划分为段,例如堆栈段、堆段、全局常量段等。
我想知道究竟是什么决定了这种分割是如何工作的。它是由编译器在编译时完成的吗?或者操作系统是否以某种方式处理它?每个子程序通常都有自己的段吗,不管它有多小?
我知道与段描述符等分段相关的信息是在体系结构级别使用寄存器处理的,并且专门分配用于处理分段。但我只是很难想象程序的实际分段首先在哪里/如何发生,以及这些信息如何进入这些寄存器。地址如何转换为段 id 和偏移量?任何人都可以启发我吗?非常感谢您提供的任何帮助,如果我在这里扼杀了任何概念,我们深表歉意。