Ícono del sitio Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Ayudando al vinculador: dividir el uso de memoria DWARF y vinculador en C ++ Builder 10.4.2

close up lumberjack chopping wood with ax sawdust fly to sides harvesting wood

Close up strong man lumberjack in uniform chopping wood with sharp ax on wooden hemp, sawdust fly to sides. Powerful ax blow, woodworking, harvesting wood for winter. Splitting logs with sharp hatchet

El vinculador es una parte central de la cadena de herramientas de C ++ Builder; después de todo, es la parte que recopila la salida del compilador y crea su binario final, por lo que es difícil subestimar su importancia. – y debido a que reúne toda la aplicación a la vez, puede usar mucha memoria. C ++ Builder 10.4.2 no es la primera versión en la que hemos introducido mejoras en el vinculador: hacer que el vinculador tenga en cuenta las direcciones grandes , ajustar el vinculador a las aplicaciones típicas actuales y documentar indicadores útiles para ajustar el comportamiento del vinculador si encuentra que el vinculador tiene problemas tu solicitud. (Sin mencionar la adición de funciones útiles como detectar mezclas de objetos clásicos y clang al vincular, lo que lo ayuda a detectar un problema invisible que afecta la estabilidad del tiempo de ejecución de su aplicación, es decir, use esto para asegurarse de que su aplicación no contenga un error común y sea estable).

En C ++ Builder 10.4.2, hemos realizado una gran mejora en el enlazador Win64 conocido como Split DWARF, algo que estamos trayendo a Windows desde el mundo Unix.

¿Por qué los nombres raros?

Los archivos de objeto, la forma compilada de cada unidad de compilación, es decir, cada archivo .cpp, se almacenan en diferentes formatos de objeto. En Win64, C ++ Builder utiliza ELF de 64 bits, que normalmente es un formato utilizado en Linux. Significa Formato ejecutable y enlazable, pero sospechamos que tiene su origen real en los fanáticos de Tolkien, porque el formato de información de depuración auxiliar, para contener información de depuración para cada objeto, se llama DWARF. Este definitivamente es un juego de palabras (consulte la página 2 de este PDF ).

Split DWARF no es el resultado de una pelea de taberna de D&D , ni siquiera de una novela de Calvino . De hecho, es una forma de dividir la información de depuración para que el enlazador no tenga que manejarla.

Este es el secreto. ¿Cuál es la mejor manera de reducir la cantidad de memoria que necesita el vinculador al vincular su aplicación?

Es casi ridículamente simple. Dándole menos para enlazar.

División de información de depuración

Por lo general, al compilar su aplicación en modo de depuración, o con cualquier unidad con información de depuración activada, la información de depuración se encuentra en el archivo objeto junto con el código compilado. El enlazador lee ambos y crea el binario final, su EXE o DLL, que también contiene código compilado e información de depuración. Esta es la razón principal por la que un EXE de depuración es mucho más grande que una aplicación normal en modo de lanzamiento.

Split DWARF procesa el archivo de objeto y divide la información de depuración en su propio archivo que se encuentra uno al lado del otro, un archivo .dwo. Un pequeño stub permanece en el archivo de objeto original que el depurador puede leer para saber dónde encontrar la información de depuración.

Para activarlo, en las Opciones del proyecto, vaya a Construcción> Compilador C ++> Depuración, y busque la opción “Usar DWARF dividido”.

Encenderlo.

Expanda la opción (haga clic en el símbolo de intercalación>) y elija una ruta absoluta donde debe ir la información de depuración, es decir, cree una ruta que no sea relativa, por ejemplo, que comience con c: o d :. Esto es necesario para garantizar que el depurador pueda encontrar la información de depuración.

Y eso es. Para obtener más información, puede encontrar nuestra documentación aquí . Puede usar el nuevo y genial depurador de Win64 (con características increíbles, como inspeccionar tipos de STL ; se han agregado más desde ese blog) mientras le da a su vinculador mucho menos para vincular en C ++ Builder 10.4.2.

Salir de la versión móvil