我有几个问题:
- 为什么
a.out
被替换为ELF
? - 导致 ELF 文件格式兴起的 a.out 格式的主要缺陷是什么?
- 早期的核心转储基于 a.out,但现在它们基于 ELF。 ELF 提供的各种优势是什么?
最佳答案
a.out
格式强制共享库在内存中占据固定位置。如果你想发布一个 a.out 共享库,你必须注册它的地址空间。这对性能有好处,但根本无法扩展。自己看how tricky it was (linuxjournal).
相比之下,在 ELF 中,共享库可以加载到内存中的任何位置,甚至对于在同一台计算机上运行的不同应用程序来说似乎位于不同的地址(代码仍然有效地仅加载到物理内存中的一个位置) !为了实现这一点,在 IA-32 架构中,必须牺牲一个寄存器 (%ebx)。 A more comprehensive reference表明共享库在 ELF 中变得更加复杂,但这是编译器端的复杂性,而不是程序员端的复杂性。
关于linux - a.out被ELF文件格式取代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352378/