O vinculador é uma parte central da cadeia de ferramentas do C ++ Builder – afinal, é a parte que coleta a saída do compilador e cria seu binário final, por isso é difícil subestimar sua importância! – e como reúne todo o aplicativo de uma vez, pode usar muita memória. C ++ Builder 10.4.2 não é a primeira versão em que introduzimos melhorias no linker: tornando o linker grande endereço , ajustando o linker para os aplicativos típicos de hoje e documentando sinalizadores úteis para ajustar o comportamento do linker se você encontrar seu aplicativo. (Sem mencionar a adição de recursos úteis, como a detecção de combinações de objetos clássicos e clang ao vincular, o que ajuda a detectar um problema invisível que afeta a estabilidade do tempo de execução do aplicativo – ou seja, use isso para garantir que seu aplicativo não contenha um erro comum e seja estável.)
No C ++ Builder 10.4.2, fizemos uma grande melhoria no vinculador Win64 conhecido como Split DWARF, algo que estamos trazendo do mundo Unix para o Windows.
Por que os nomes estranhos?
Os arquivos de objeto – a forma compilada de cada unidade de compilação, ou seja, cada arquivo .cpp – são armazenados em diferentes formatos de objeto. No Win64, o C ++ Builder usa ELF de 64 bits, que normalmente é um formato usado no Linux. Significa Executable and Linkable Format, mas suspeitamos que tenha sua origem real nos fãs de Tolkien – porque o formato auxiliar de informações de depuração, para armazenar informações de depuração para cada objeto, é denominado DWARF. Este é definitivamente um trocadilho (consulte a página 2 deste PDF ).
Split DWARF não é o resultado de uma briga de taberna de D&D , ou mesmo de um romance de Calvino . Na verdade, é uma maneira de dividir as informações de depuração para que o vinculador não precise lidar com elas.
Esse é o segredo. Qual é a melhor maneira de reduzir a quantidade de memória que o vinculador precisa ao vincular seu aplicativo?
É quase ridiculamente simples. Dando menos para vincular.
Dividindo informações de depuração
Normalmente, ao construir seu aplicativo no modo de depuração, ou com quaisquer unidades com informações de depuração ativadas, as informações de depuração estão contidas no arquivo-objeto junto com o código compilado. O vinculador lê e cria o binário final – seu EXE ou DLL – que também contém o código compilado e as informações de depuração. Este é o principal motivo pelo qual um EXE de depuração é muito maior do que um aplicativo de modo de lançamento normal.
Dividir DWARF processa o arquivo de objeto e divide as informações de depuração em seu próprio arquivo que fica lado a lado, um arquivo .dwo. Um pequeno fragmento permanece no arquivo de objeto original que o depurador pode ler para saber onde encontrar as informações de depuração.
Para ativá-lo, em Opções de projeto vá para Edifício> Compilador C ++> Depuração e encontre a opção “Usar DWARF Dividido”.
Ligue-o.
Expanda a opção (clique no acento circunflexo>) e escolha um caminho absoluto onde as informações de depuração devem ir – ou seja, crie um caminho que não seja relativo, por exemplo, comece com c: ou d :. Isso é necessário para garantir que o depurador possa localizar as informações de depuração.
E é isso. Para mais informações, você pode encontrar nossa documentação aqui . Você pode usar o excelente novo depurador Win64 (com recursos incríveis, como inspecionar tipos de STL – mais foram adicionados desde esse blog) enquanto dá ao seu vinculador muito menos para vincular no C ++ Builder 10.4.2!