Supongo Supongo que es una forma de hacer que las aplicaciones que no la usan en absoluto rinden un poco mejor. Aquí está mi pensamiento sobre esto.
x86 Los sistemas operativos (y me imagino otros) necesitan almacenar el estado de FPU al cambiar de contexto. Sin embargo, la mayoría de los sistemas operativos solo se molestan en guardar/restaurar este estado después de que la aplicación intente usar la FPU por primera vez.
Además de esto, es probable que exista algún código básico en la biblioteca matemática que establecerá la FPU en un estado base sano cuando se cargue la biblioteca.
Por lo tanto, si no enlaza ningún código matemático, nada de esto sucederá, por lo tanto, el sistema operativo no tiene que guardar/restaurar ningún estado de FPU, haciendo que los cambios de contexto sean un poco más eficientes.
Sólo una suposición.
EDIT: En respuesta a algunos de los comentarios, la misma premisa básica sigue siendo válida para casos que no sean FPU (la premisa es que las aplicaciones que no hacen funcionar libm funcionan un poco mejor).
Por ejemplo, si hay una FPU suave que era muy probable en los primeros días de C. Luego, separar una libma podría evitar que un código grande (y lento si se usara) se vincule innecesariamente en.
Además, si solo hay enlaces estáticos disponibles, se aplica un argumento similar que mantendría los tamaños de los ejecutables y los tiempos de compilación.
OK, entonces esto se convierte en una pregunta de diseño de la biblioteca: ¿por qué las bibliotecas están particionadas de esta manera? –
Apuesto a optimizar el tiempo de compilación de UNIX (y el conjunto de herramientas que lo acompaña). En ese momento, ¿era probablemente la cosa más compleja que se estaba construyendo en C. –
tener algo que ver con la emulación fpu? pero para Linux, la emulación final está en kernel y no en la libm ... ¿verdad? –