Esta es una pregunta de iOS.¿Por qué el tamaño del binario final sería mucho más pequeño que el tamaño de la biblioteca estática?
Construyo una biblioteca estática (framework en iOS) que luego se incluye en una aplicación. El tamaño del resultado binario (500 kb) es menor que el tamaño de la biblioteca estática (6 mb). ¿Como funciona esto? Mi comprensión de la biblioteca estática es que la biblioteca estática se incluye en el binario final
Además de esto, una biblioteca correctamente factorizada tiene cada función (o familia de funciones estrechamente relacionadas) en un archivo separado '.o'. En dicho uso, la cabecera del encabezado del archivo '.o' puede fácilmente ser del 25% del tamaño del archivo para cada archivo' .o', y en el peor de los casos, la sobrecarga puede ser decenas o cientos de veces el tamaño del código. Es decir, un archivo '.a' bien factorizado podría ser normalmente un 50% de código y 50% de encabezados de archivo' .o'. Por supuesto, esto funciona junto con la respuesta de ouah: cuanto mejor sea una biblioteca, mayor será la posibilidad de que el enlazador omita los archivos de objeto innecesarios. –
Estoy de acuerdo en principio con el comentario de @R .. Pero en estos días las herramientas pueden hacer algunas de estas tareas automáticamente (por ejemplo '-ffunction-sections' de gcc (efectivamente coloca cada función en un archivo' .o') et al.), Así que tal vez hacerlo en el nivel de código fuente no sea tan importante como lo fue una vez. – ldav1s
@ ldav1s: aunque '-ffunction-sections' y opciones relacionadas están disponibles, no creo que sean de uso generalizado, y no tengo claro si las opciones de enlazador necesarias están habilitadas por defecto. También hay algunos casos, como estructuras estáticas que contienen punteros a funciones, donde '-ffunction-sections' podría (de nuevo, no estoy seguro) ser insuficiente para eliminar las funciones innecesarias. –