Оптимизация кода
Обновлен: Ноябрь 2007
Оптимизация представляет собой процесс настройки производительности исполняемого файла в целях обеспечения наибольшей производительности при наименьшем объеме кода. Visual C++ предоставляет следующие механизмы оптимизации кода:
В исходный код могут вставляться дерективы pragma и ключевые слова.
Сведения о параметрах компилятора, поддерживающих оптимизацию, см. в разделе Категории параметров компилятора.
Повышение производительности программы
Подробные сведения о повышении производительности программы с помощью оптимальных методов программирования см. в разделе:
Оптимизация кода
Ввиду того, что в процессе оптимизации код, созданный компиляторам, изменяется, рекомендуется приступать к оптимизации кода только по завершении его тестирования и отладки. В этом случае можно выполнять отладку для кода, наиболее точно совпадающего с исходным кодом, и влияние оптимизации будет минимальным. По завершении процесса оптимизации следует повторно выполнить тестирование кода. В некоторых случаях поведение кода изменяется после выполнения оптимизации. В таком случае, возможно, потребуется отладка оптимизированного кода. Дополнительные сведения см. в разделе Проблемы общего характера при создании построения выпуска.
Оптимизированный код в некоторых случаях дает другие ответы не вследствие ошибки, но по причине того, что оптимизация изменяет порядок вычислений, что приводит к появлению незначительных отличий в результатах из-за ограничений в точности с плавающей точкой.
Также можно отметить появление дополнительных предупреждений во время компиляции кода с оптимизацией. Это нормально, поскольку некоторые предупреждения относятся только к оптимизированному коду. Если принимать во внимание такие предупреждения, можно избежать большинства проблем, связанных с оптимизацией.
Парадоксально, но оптимизация быстродействия программы может в отдельных случаях вызвать замедление быстродействия кода, поскольку некоторые процессы оптимизации быстродействия увеличивают объем кода. Встраивание функций, например, может свести к минимуму дополнительные издержки при вызове функций; однако вследствие встраивания слишком большого объема кода размер программы может увеличиться настолько, что это приведет к увеличению числа ошибок страницы виртуальной памяти. Таким образом, увеличение быстродействия вследствие отказа от вызовов функции может привести к потерям в памяти подкачки. По этой причине рекомендуется измерять производительность программы до и после выполнения оптимизации. Общие правила оптимизации приложения см. в разделе Рекомендации по оптимизации.
Pragma оптимизации
Если в каком-либо участке кода возникают ошибки или замедление быстродействия вследствие оптимизации, для отключения оптимизации для данного участка можно использовать дерективу pragma оптимизации. Следует поместить код между двумя прагмами, как показано далее:
#pragma optimize("", off)
// some code here
#pragma optimize("", on)
Дополнительные подразделы
Дополнительные подразделы по оптимизации см. в разделе:
Дополнительные сведения о сокращении времени загрузки методов DLL см. в статье "Оптимизация производительности и быстродействия загрузки DLL" в колонке "Under the Hood" в "MSDN Magazine" в Библиотеке MSDN.
Дополнительные сведения о минимизации разбиения приложений на страницы см. в статьях "Повышение производительности среды выполнения с помощью Smooth Working Set Tool" и "Повышение производительности среды выполнения с помощью Smooth Working Set Tool — часть 2" в колонке "Bugslayer" в "MSDN Magazine" в Библиотеке MSDN.