почему игровые движки предпочитают статические библиотеки динамическим ссылкам - PullRequest
18 голосов
/ 27 апреля 2010

Я читал несколько игровых книг. И они всегда предпочитают создавать движок в виде статической библиотеки, а не динамической ссылки. Я новичок в c ++, поэтому я не очень хорошо разбираюсь в статических библиотеках и библиотеках динамических ссылок. Все, что я знаю, это то, что статические библиотеки увеличивают размер вашей программы, где библиотеки ссылок DLL загружаются так, как вам нужно в вашей программе.

[править]

Я играл в игры, где казалось, что они используют DLL для загрузки звука, освещения и чего-то еще, но не все по отдельности. как уровень загружался. потому что вам не обязательно это нужно, когда вы в меню игры.

Ответы [ 5 ]

19 голосов
/ 27 апреля 2010

библиотеки динамических ссылок должны быть независимыми от позиции; это может привести к снижению производительности на некоторых процессорных архитектурах.

Статические библиотеки могут быть оптимизированы при включении в вашу программу, например, путем удаления мертвого кода. Это может улучшить производительность кэша.

7 голосов
/ 27 апреля 2010

Под независимой позицией он подразумевает, что, поскольку игровой движок и DLL полностью разделены, DLL является автономной и не может быть встроена в код игрового движка, в то время как статическое связывание библиотеки позволяет компилятору оптимизировать, используя обе ваши игры. код двигателя и код библиотеки.

Например, скажем, есть небольшая функция, которую компилятор считает встроенной (копируется непосредственно вместо вызова функции). Затем со статической библиотекой компилятор сможет встроить этот код, поскольку он знает , что это за код (вы создаете ссылки во время компиляции). Однако с динамической библиотекой компилятор не сможет встроить этот код, так как он не знает , что это за код (поскольку он будет ссылаться во время выполнения).

3 голосов
/ 27 апреля 2010

Другая часто упускаемая из виду причина, которая заслуживает упоминания, заключается в том, что во многих играх вы не собираетесь запускать множество других вещей, а многие библиотеки, используемые для игр, не будут использоваться для других вещей, которые вы можете работать одновременно с игрой, поэтому вам не нужно беспокоиться об одном из основных преимуществ, которые вы получаете от использования разделяемых библиотек, а именно о том, что за один раз необходимо загрузить только одну копию (большую часть) библиотеки в то время как несколько вещей могут использовать эту одну копию. При запуске игры у вас, вероятно, будет только одна программа, которая в любом случае захочет использовать эту библиотеку, потому что вы, вероятно, не собираетесь запускать много других программ (особенно других игр или 3D-программ) одновременно.

Вы также открываете возможность глобальной / линковочной оптимизации времени, что намного сложнее с общими библиотеками.

2 голосов
/ 27 апреля 2010

При разработке игр для консоли часто динамическое связывание невозможно. Если вы хотите использовать движок для разработки как на приставке, так и на ПК, лучше избегать динамического связывания.

2 голосов
/ 27 апреля 2010

Другой вопрос касается различий между статическими и динамическими библиотеками: Когда использовать динамические и статические библиотеки

Что касается того, почему они используют статические библиотеки, дополнительная скорость может стоить того, и вы можете избежать ада DLL (в прошлом это было большой проблемой). Это также полезно, если вы хотите распространять свою программу и библиотеки вместе, чтобы у получателя были правильные зависимости, хотя ничто не мешает вам распространять DLL вместе с исполняемым файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...