最近我一直在阅读现代操作系统如何加载可执行程序并为它们分配内存。不幸的是,我只有一本俄语的计算机科学书籍作为参考,所以,如果我错了,请纠正我,但现代操作系统似乎在可执行程序中有不同的部分用于数据和实际的处理器命令。此外,不可能将控制权交给数据部分,即不能将命令存储在那里。也无法更改可执行 ( text
) 部分中的处理器命令。
因此,问题是:现代编译的 CL(SBCL,Clozure-CL)是如何做到的?据我所知,它会创建已编译的 FASL 文件,然后加载它们。但是在编译文件时会创建可见的 FASL 文件。评估函数形式时会发生什么?其次,CL 如何加载它们(在机器/操作系统命令级别)以便为它们分配正确的内存?此外,必须以某种方式卸载旧代码。
PS。当然,这对于解释型语言来说不是问题。对于 JIT 编译器来说,事情变得更加复杂。