c++ - programar - motores graficos 2d
¿Por qué los motores de juegos prefieren las bibliotecas estáticas a las de enlaces dinámicos? (5)
He estado leyendo algunos libros de juegos. Y siempre prefieren crear el motor como una biblioteca estática sobre un enlace dinámico. Soy nuevo en c ++, por lo que no tengo mucho conocimiento cuando se trata de bibliotecas estáticas y bibliotecas de enlaces dinámicos. Lo único que sé es que las bibliotecas estáticas aumentan el tamaño de su programa, donde las bibliotecas de enlace DLL se cargan a medida que las necesita dentro de su programa.
[editar]
He jugado juegos en los que casi parecía que usaban DLL para cargar sonido, iluminación y lo que no todos individualmente. como el nivel se estaba cargando. porque no necesariamente necesitas eso cuando estás en el menú del juego.
Al desarrollar juegos para una consola, a menudo el enlace dinámico no es una opción. Si desea utilizar el motor tanto para el desarrollo de consolas como de PC, sería mejor evitar el enlace dinámico.
Las bibliotecas de enlaces dinámicos deben ser independientes de la posición; Esto puede causar ineficiencias de rendimiento en algunas arquitecturas de procesadores.
Las bibliotecas estáticas se pueden optimizar cuando se incluyen en su programa, por ejemplo, eliminando el código muerto. Esto puede mejorar el rendimiento del caché.
Otra pregunta cubre las diferencias entre las bibliotecas estáticas y dinámicas: cuándo usar bibliotecas dinámicas y estáticas
En cuanto a por qué usan bibliotecas estáticas, la velocidad adicional puede valer la pena y puede evitar el infierno de DLL (fue un gran problema en el pasado). También es útil si desea distribuir su programa y bibliotecas juntas, asegurándose de que el destinatario tenga las dependencias correctas, aunque no hay nada que le impida distribuir DLL junto con el ejecutable.
Otra razón que a menudo se pasa por alto y que merece ser mencionada es que para muchos juegos no se ejecutarán muchas otras cosas, y muchas bibliotecas que se usan para juegos no se usarán para las otras cosas en las que puede estar ejecutando al mismo tiempo que un juego, por lo que no tiene que preocuparse por uno de los aspectos positivos principales que obtiene al usar bibliotecas compartidas, que es que solo una copia de (la mayor parte) de la biblioteca necesita cargarse al mismo tiempo mientras varias cosas Puede hacer uso de esa copia. Cuando ejecute un juego, es probable que solo tenga un programa que quiera usar esa biblioteca que se ejecuta de todos modos porque probablemente no ejecutará muchos otros programas (en particular otros juegos o programas 3D) al mismo tiempo.
También abre la posibilidad de optimización de tiempo global / de enlace, que es mucho más difícil con las bibliotecas compartidas.
Por posición independiente, quiere decir que dado que el motor del juego y la DLL están completamente separados, la DLL es independiente y no puede ser entretejida en el código del motor del juego, mientras que la vinculación estática de una biblioteca permite al compilador optimizar usando el código del motor del juego Y El código de la biblioteca.
Por ejemplo, supongamos que hay una pequeña función que el compilador piensa que debería estar en línea (copiada directamente en lugar de una llamada de función). Luego, con una biblioteca estática, el compilador podría integrar este código, ya que sabe cuál es el código (está enlazando en tiempo de compilación). Sin embargo, con una biblioteca dinámica, el compilador no podría insertar ese código, ya que no sabe qué es el código (ya que se vinculará en tiempo de ejecución).