Встроенные функции в отладочной сборке (Visual C ++ 2008) - PullRequest
7 голосов
/ 22 сентября 2011

Игровой движок, с которым я работаю, слишком медленный в отладочной сборке и невозможно отладить игру.Я хотел бы, чтобы компилятор встроил небольшие функции (особенно в классы Vector / Matrix и контейнера).Это может или не может ускорить игру в отладочной сборке.Перед интенсивным профилированием и попыткой выяснить узкие места я подумал, что сначала попробую это сделать, поскольку мне придется выполнять минимальную работу, и результаты могут быть многообещающими.

Итак, есть ли способ получить компилятор Visual C ++ для встроенных функций в отладочных сборках?

Ответы [ 4 ]

5 голосов
/ 22 сентября 2011

Параметры проекта -> C / C ++ -> Оптимизация -> Расширение встроенных функций.Преврати это в /Ob2.Сделайте это в своей конфигурации отладки.

В выпуске расширение встроенных функций подразумевается другими настройками оптимизации, поэтому, хотя по умолчанию все конфигурации говорят «По умолчанию» для этого параметра, поведение действительно отличается.

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

http://msdn.microsoft.com/en-us/library/47238hez.aspx

1 голос
/ 22 сентября 2011

Вы путаете два варианта компилятора. /O влияет на оптимизацию, включая встраивание. /ZI создает файл PDB для отладки. Они могут быть установлены независимо.

Может быть полезно клонировать конфигурацию «Debug» и создать «оптимизированную для отладки» конфигурацию с /O1 и /ZI.

0 голосов
/ 22 сентября 2011

Вы можете попробовать __forceinline.Обязательно прочтите об отладочных сборках на этой странице (отключите опцию /Ob0).

Я подозреваю, что это не сильно изменит производительность.Если вы еще этого не сделали, попробуйте добавить символы в сборку релиза.Он работает довольно хорошо для устранения многих проблем.

0 голосов
/ 22 сентября 2011

DEBUG определяется Visual Studio, когда проект компилируется в режиме отладки, поэтому:

#ifdef DEBUG
  inline void fn() {
#else
  void fn() {
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...