书中Linkers and Loaders ,提到可执行文件具有单独代码段的原因之一是代码段可以保存在只读页面中,从而提高性能。对于现代操作系统来说仍然如此吗?视为Just in Time compilers正在动态生成代码,我认为它们需要可写页面。这是否意味着 JIT 生成的代码相比之下总是会受到性能影响?如果是这样,它的影响力有多大?
最佳答案
抛开内存管理的影响(在其他答案中对此进行了解释),CPU不需要不断检查当前指令流是否被修改,并且管道中的中间结果应该被丢弃,并且需要新的代码读。在 jit 编译的情况下,这种情况可能经常发生,具体取决于编译器的设计、CPU 管道的深度、CPU 上代码缓存的大小以及可能修改该代码的其他 CPU 的数量。在设计良好的现代系统中,通常不允许发生这种情况,在现代系统中,代码生成到可写页面,然后标记为可执行和只读。当然这并不是 jit 所独有的。它可能发生在各种自修改代码中。
关于performance - JIT 性能是否会因可写页面而受到影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1155483/