GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué es el enlazador de oro?

El gold linker fue diseñado como un enlazador específico de ELF, con la intención de producir un enlazador más fácil de mantener y más rápido que BFD ld (el enlazador binutils GNU "tradicional"). Como efecto secundario, es capaz de vincular programas muy grandes usando menos memoria que BFD ld , presumiblemente porque hay menos capas de abstracción con las que lidiar y porque las estructuras de datos del enlazador se asignan más directamente al formato ELF.

No estoy seguro de que haya mucha documentación que aborde específicamente las diferencias de diseño entre los dos enlazadores y su efecto en el uso de la memoria. Hay una serie muy interesante de artículos sobre enlazadores de Ian Lance Taylor, el autor de varios enlazadores GNU, que explica muchas de las decisiones de diseño que conducen a gold . El escribe que

El enlazador en el que estoy trabajando ahora, llamado oro, será el tercero. Es exclusivamente un enlazador ELF. Una vez más, el objetivo es la velocidad, siendo en este caso más rápido que mi segundo enlazador. Ese enlazador se ha ralentizado significativamente a lo largo de los años al agregar soporte para ELF y para bibliotecas compartidas. Este soporte se parcheó en lugar de estar diseñado.

(El segundo enlazador es BFD ld .)


El enlazador dorado fue escrito para hacer que el proceso de enlace sea considerablemente más rápido. Según el autor de oro Ian Lance Taylor

Por el momento, el oro solo tiene una ventaja significativa sobre el enlazador existente:es más rápido. En programas grandes de C++, he medido que se ejecuta cinco veces más rápido.

Está comparando el rendimiento del enlazador dorado con el enlazador GNU tradicional. gold (a diferencia del enlazador GNU) no usa la biblioteca BFD para procesar archivos de objetos.

La limitación de Gold es que (a diferencia del enlazador GNU que puede procesar muchos tipos de archivos de objetos) solo puede vincular archivos de objetos en formato ELF.

Con respecto a los problemas que enfrentó al usar el enlazador GNU, aquí hay una respuesta interesante a una pregunta similar sobre SO de Michael Adam:

El enlazador dorado incluso encontró algunos problemas de dependencia en nuestro código, ya que parece ser más correcto que el clásico con respecto a algunos detalles. Véase, p. esta confirmación de Samba.


gold contra ld punto de referencia

He publicado un benchmark sintético concreto de ld vs gold en:https://stackoverflow.com/questions/3476093/replacing-ld-with-gold-any-experience/53921263#53921263

Resumen de resultados:el oro fue de 2 a 3 veces más rápido que el ld.

Esta ganancia de tiempo puede cambiar enormemente las reglas del juego en proyectos complejos de C++ con plantillas fuera de control y generación de código, porque el paso de enlace involucra todos los archivos del proyecto y, a diferencia de la compilación, tiene que hacerse siempre, incluso si cambia solo un único archivo .cpp.

Entonces, un tiempo de enlace lento hace que el ciclo de desarrollo sea insoportable, y es probablemente la razón principal por la que Google invirtió recursos en él. Solo imagine las ganancias de esperar 10 segundos en lugar de 30 segundos por cada cambio de archivo trivial.

Las ganancias de tiempo del punto de referencia sintético también coincidieron con las ganancias reales que tuve en un proyecto complejo del mundo real (gem5), como también se menciona en esa respuesta.


Linux
  1. ¿Cuál es el significado de POSIX?

  2. ¿Cuál es el significado de *nix?

  3. ¿Cuál es el concepto de vruntime en CFS?

  4. ¿Cuál es la contraseña predeterminada de la pantalla?

  5. ¿Qué es el sistema de archivos NSFS?

¿Qué es el comando Watch de Linux + ejemplos?

¿Qué es el Shell en Linux?

NVMe vs M.2:¿Cuál es la diferencia?

iptables vs nftables:¿Cuál es la diferencia?

¿Qué es el comando matar en Linux?

¿Qué es la vulnerabilidad de Logjam?