Pokud si vzpomínám, jedním z původních problémů formátu a.out je, že podporoval pouze tři sekce:text, data a bss. ELF umožňuje libovolné číslo (nebo alespoň mnohem více). Formát záhlaví a.out byl velmi jednoduchý, něco jako:
word <magic>
word <text size>
word <data size>
word <bss size>
Naproti tomu formát ELF má záhlaví sekcí s názvy, velikostmi atd.
Více sekcí umožňuje standardní sekce, ale také nám poskytuje konstantní sekce, konstruktorové sekce a dokonce jednu sekci na funkci, pokud ji chceme.
a.out
formát nutil sdílené knihovny zabírat pevné místo v paměti. Pokud jste chtěli distribuovat sdílenou knihovnu a.out, museli jste zaregistrovat její adresní prostor. To bylo dobré pro výkon, ale vůbec se to nezměnilo. Podívejte se sami, jak to bylo složité (linuxjournal).
Naproti tomu v ELF mohou být sdílené knihovny načteny kdekoli v paměti a mohou se dokonce zdát, že jsou na různých adresách pro různé aplikace běžící na stejném počítači (s kódem stále efektivně načteným pouze na jednom místě ve fyzické paměti)! Aby toho bylo dosaženo, v architektuře IA-32 je třeba obětovat registr (%ebx). Komplexnější reference ukazující, že sdílené knihovny se v ELF zkomplikovaly, ale to byla složitost na straně kompilátoru, na rozdíl od programátorské.