Nice programing

Visual Studio에서 "코드 최적화"옵션은 실제로 어떤 역할을합니까?

nicepro 2020. 10. 27. 23:17
반응형

Visual Studio에서 "코드 최적화"옵션은 실제로 어떤 역할을합니까?


옵션의 이름은 무언가를 알려주지 만 Visual Studio / 컴파일러가 실제로하는 일과 실제 결과는 무엇입니까?

편집 : Google을 검색하면 이 주소를 찾을 수 있지만 실제로 찾고있는 것은 아닙니다. 진짜 무슨 일이 일어나고 있는지 궁금합니다. 예를 들어 루프의 시간이 줄어드는 이유는 무엇입니까?


최적화가 없으면 컴파일러는 매우 멍청한 코드를 생성합니다. 각 명령은 매우 간단한 방식으로 컴파일되어 의도 한 작업을 수행합니다. 최적화가 없으면 생성 된 실행 파일이 간단한 방식으로 소스 코드와 일치하기 때문에 디버그 빌드에는 기본적으로 최적화가 비활성화되어 있습니다.

레지스터에 유지되는 변수

최적화를 켜면 컴파일러는 동일한 작업을 계속하면서 코드를 더 빠르게 실행하기 위해 다양한 기술을 적용합니다. Visual C ++에서 최적화 된 빌드와 최적화되지 않은 빌드의 가장 분명한 차이점은 변수 값이 최적화 된 빌드에서 가능한 한 오랫동안 레지스터에 유지되는 반면 최적화 없이는 항상 메모리에 저장된다는 것입니다. 이는 코드 속도뿐만 아니라 디버깅에도 영향을 미칩니다. 이 최적화의 결과로 디버거는 코드를 단계별로 실행할 때 변수 값을 안정적으로 얻을 수 없습니다.

기타 최적화

/ O 옵션 (코드 최적화) MSDN 문서에 설명 된대로 컴파일러에 의해 적용되는 여러 다른 최적화가 있습니다 . 다양한 최적화 기술에 대한 일반적인 설명은 Wikipedia 컴파일러 최적화 문서를 참조하십시오 .


에서 폴 빅의 블로그 :

  • 디버깅을 지원하기 위해 내보내는 NOP 명령을 제거합니다. 최적화가 꺼져 있고 디버깅 정보가 켜져 있으면 컴파일러는 실제 IL이 연결되어 있지 않지만 중단 점을 설정하려는 줄에 대해 NOP 명령을 내 보냅니다. 이와 같은 가장 일반적인 예는 "If"문의 "End If"입니다. End If에 대해 실제 IL이 방출되지 않으므로 NOP를 방출하지 않으므로 디버거에서 중단 점을 설정할 수 없습니다. 그 위에. 최적화를 켜면 컴파일러가 NOP를 내 보내지 않도록합니다.

  • 생성 된 IL에 대한 간단한 기본 블록 분석을 수행하여 데드 코드 블록을 제거합니다. 즉, 각 메소드를 분기 명령어로 구분 된 IL 블록으로 분리합니다. 블록이 어떻게 상호 연관되는지에 대한 빠른 분석을 통해 분기가없는 블록을 식별 할 수 있습니다. 따라서 실행되지 않고 생략 될 수있는 코드 블록을 파악하여 어셈블리를 약간 더 작게 만들 수 있습니다. 또한이 시점에서 몇 가지 사소한 분기 최적화를 수행합니다. 예를 들어 다른 GoTo 문으로 이동하는 경우 첫 번째 GoTo를 최적화하여 두 번째 GoTo의 대상으로 이동합니다.

  • IsJITOptimizerDisabled가 False로 설정된 DebuggableAttribute를 내 보냅니다. 기본적으로이를 통해 런타임 JIT가 코드 재정렬 및 ​​인라인 코드를 포함하여 적합하다고 판단되는 코드를 최적화 할 수 있습니다. 이렇게하면 더 효율적이고 작은 코드가 생성되지만 코드를 디버깅하는 것은 매우 어려울 수 있습니다 (시도한 사람이라면 누구나 알려줄 것입니다). JIT 최적화가 무엇인지에 대한 실제 목록은 내가 알지 못하는 것입니다. 아마도 Chris Brumme와 같은 사람이이 문제에 대해 어느 시점에서 차임이 될 것입니다. 장단점은 최적화 스위치가 중단 점을 설정하고 코드를 더 어렵게 만들 수있는 최적화를 가능하게한다는 것입니다.


짧은 대답은 -Ox를 사용하고 컴파일러가 작업을 수행하도록하는 것입니다.

긴 대답 : 다양한 종류의 최적화 효과를 정확하게 예측하는 것은 불가능합니다. 때로는 빠른 코드를 최적화하면 크기를 최적화 할 때보 다 실제로 더 작은 코드가 생성됩니다. 실제로 마지막 0.01 %의 성능 (속도 또는 크기)을 얻으려면 다양한 옵션 조합을 벤치마킹해야합니다.

또한 최신 버전의 Visual Studio에는 링크 시간 최적화 및 프로필 기반 최적화와 같은 고급 최적화 옵션이 있습니다.

참고 URL : https://stackoverflow.com/questions/113866/what-does-optimize-code-option-really-do-in-visual-studio

반응형