最近,我一直在阅读有关现代操作系统如何加载可执行程序并为其分配内存的文章。不幸的是,我只有一本俄语版的计算机科学书籍作为参考,所以,如果我错了,请纠正我,但现代操作系统似乎在可执行程序中有不同的部分来存储数据和实际的处理器命令。此外,不可能将控制交给数据部分,即不能将命令存储在那里。也不能更改可执行文件(text)部分中的处理器命令。
因此,问题是:现代编译CL (SBCL,Clozure-CL)是如何做到这一点的?据我所知,它创建编译后的FASL文件,然后加载它们。但可见的FASL文件是在编译文件时创建的。当计算函数形式时会发生什么?其次,CL如何加载它们(在机器/OS命令级别),以便为它们分配正确的内存?此外,旧代码必须以某种方式卸载。
PS。当然,这不是解释型语言的问题。对于JIT编译器来说,事情变得更加复杂。
发布于 2018-07-20 22:33:26
也许这澄清了一些事情:Google Groups
与C不同,你不需要编译你的程序,然后执行它们。相反,您是在lisp环境中工作。将文件加载到上面的sbcl中后,您只需输入
(你好)
您的代码将被执行,而您运行的代码将被编译,而不是解释。在SBCL中,您不需要首先显式编译,因为您输入或加载到sbcl中的所有代码都是动态编译的。事实上,sbcl中没有解释器。在其他lisp系统中,您可能需要显式编译才能编译代码。
文件不能单独执行,它必须和sbcl一起使用。
https://stackoverflow.com/questions/51060672
复制相似问题