Зачем предпочитать / Ob1 над / Ob2 в Visual C ++ 9, когда нет строгих ограничений на размер исполняемого файла? - PullRequest
4 голосов
/ 27 апреля 2011

Возможности Visual C ++ /Ob опция компилятора, которая управляет встраиванием функции. С /Ob1 только функции, отмеченные inline, __inline или определенные в объявлении класса, являются встроенными, тогда как с /Ob2 все функции, которые компилятор считает подходящими, являются встроенными.

Я могу представить проект, который имеет очень жесткие ограничения на размер изображения, используя /Ob1 вместо /Ob2. Удивительно, но мы нашли проект, который не имеет жестких ограничений по размеру изображения, хотя он использовал /Ob1, и мы не можем найти никаких причин, почему он делает это.

Почему проект, не имеющий жестких ограничений по размеру исполняемого файла, предпочитает /Ob1 над /Ob2?

Ответы [ 4 ]

4 голосов
/ 27 апреля 2011

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

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

1 голос
/ 28 июня 2012

Я столкнулся с ошибкой компилятора в / Ob2 в 64-битных сборках Release. Использование / Ob1 делает проблему исчезнуть. Разработчик проекта может столкнуться с той же или похожей проблемой.

1 голос
/ 27 апреля 2011

Нет реальной причины с точки зрения скорости.Встраивание имеет определенные компромиссы, но эвристика компилятора почти наверняка умнее, чем пользователь.

0 голосов
/ 27 апреля 2011
  1. Время компиляции может быть немного быстрее в первом случае.
  2. Компилятор не всегда может принять оптимальное решение о том, какие функции в соответствии. Увеличение количества элементов для ускорения работы отдельных функций может в целом замедлить работу всей программы из-за побочных эффектов, таких как разлив кеша.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...