2012-09-28 10 views

Respuesta

19

Sí, lo hay, aunque es muy específico y normalmente no es motivo de preocupación.

La opción -dinámica indica al vinculador que agregue símbolos a las tablas de símbolos que normalmente no se necesitan en el tiempo de ejecución. Significa que hay más, posiblemente muchos más, símbolos que el enlazador dinámico necesita eliminar en el tiempo de ejecución para la resolución del símbolo.

Específicamente, dado que las búsquedas de tabla de símbolos en sistemas basados ​​en GNU se implementan usando un hash, tener más símbolos aumenta las posibilidades de que haya colisiones hash. Dado que todos los símbolos que colisionan en la tabla hash se sientan en una lista, el vinculador de tiempo de ejecución debe atravesar la lista y comparar, utilizando memcmp, cada nombre de símbolo. Tener más símbolos colisionando en el hash significa tener listas más largas y tomará más tiempo para resolver cada símbolo dinámico.

Esta situación es ligeramente peor para C++ que para C, con la multitud de nombres de símbolos con el mismo prefijo debido a los nombres de clase.

En la práctica, esto solo tiene efecto la primera vez que se utiliza un símbolo y, a menos que su aplicación sea muy grande y contenga muchos símbolos, no se sentirá.

En el raro caso de que su aplicación sea tan grande, se pueden usar trucos como prelinking para superar la sobrecarga.

Cuestiones relacionadas