No Linux (não tenho certeza para Windows, qualquer conhecimento sobre isso também é apreciado), uma técnica chamada ligação lenta é usada para aumentar o desempenho quando apenas uma pequena parte da biblioteca compartilhada é necessária, imagine quando você invoca um programa com -h --help arg, etc.
Eu queria saber como isso é implementado? está relacionado à técnica de alocação lenta de gerenciamento de memória virtual do sistema operacional? ou seja, em vez de carregar todas as instruções na memória, um mapeamento para a memória não mapeada é conduzido primeiro, e a memória válida é carregada somente quando for realmente necessária/referida durante o tempo de execução.
Não, eles não estão relacionados, embora ambos contribuam para o desempenho nesse caso.
A vinculação de biblioteca é implementada com uma matriz de ponteiros de função. A matriz em si é alocada estaticamente pelo vinculador e faz parte do executável. A vinculação envolve preencher esse array com os endereços reais das funções.
A ligação lenta ignora o preenchimento da matriz. Em vez disso, a matriz é pré-preenchida com um ponteiro para uma rotina de ligação. Quando uma função está sendo chamada, ela é vinculada: o slot da matriz é substituído por um endereço real. Funções que nunca são chamadas nunca são vinculadas.