/ Ox 및 / O2 컴파일러 옵션의 차이점은 무엇입니까?
Microsoft의 C ++ 컴파일러 ( cl.exe
, Visual Studio에 포함됨)는 여러 최적화 스위치를 제공 합니다 . 그들 대부분의 차이는 자명 해 보이지만 /O2
(최대 속도를 위해 코드를 최적화하는)와 /Ox
( "전체 최적화"를 선택하는 ) 의 차이점이 무엇인지는 분명하지 않습니다 .
옵션에 대한 문서 를 읽으려고했는데이 /Ox
스위치가 크기가 아닌 최대 속도에 대한 최적화도 가능하게한다는 것을 확인한 것 같습니다.
/Ox
컴파일러 옵션은 작은 크기를 통해 실행 속도를 선호 코드를 생성합니다.
그러나 특히 "비고"섹션 아래에있는 다음 진술이 눈에 띄었습니다.
일반적으로
/O2
대신 (속도 최대화)를 지정/Ox
합니다.
내 질문은 그래서, 왜 하나는 일반적으로 선호합니다 /O2
이상 /Ox
? 후자의 옵션을 사용하면 예기치 않은 버그 또는 예상치 못한 동작을 유발하는 것으로 알려진 특정 최적화가 가능합니까? 얻을 수있는 최적화의 양이 추가 컴파일 시간의 가치가 없다는 것이 단순히 있습니까? 아니면 이것이 VS /O2
의 기본 옵션 이라는 사실로 인한 완전히 의미없는 "권장 사항" 일까요?
Asha의 답변 은 Visual Studio 2005에 대한 블로그 게시물을 인용하며 다소 구식입니다.
최신 버전의 문서는 여기에서 사용할 수 있습니다.
/Ox
: https://msdn.microsoft.com/en-us/library/59a3b321.aspx/O2
: https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx
그들에 따르면 :
/Ox
→/Og /Oi /Ot /Oy /Ob2
/O2
→ 동일하지만 추가/Gs /GF /Gy
/GF
중복 문자열 제거/Gy
수행 기능 수준의 연결을
또한 /GS-
스택 주변의 보안 검사를 끄는 방법에 관심 이있을 수 있습니다. 이는 상당한 성능 저하가 될 수 있습니다 ( / GS에 대한 MS 문서 참조 ).
언제나처럼 특정 애플리케이션을 벤치마킹해야합니다.
여기 에서 찾았습니다 .
Ox와 O2는 거의 동일합니다. 그들은 O2도 GF 와 Gy를 던진다는 점에서만 다릅니다 . 이 두 스위치를 던지는 것을 피할 이유가 거의 없습니다.
'developer tip' 카테고리의 다른 글
Visual Studio는 창 설정을 잊어 버리고 엉망이됩니다. (0) | 2020.11.21 |
---|---|
JVM은 오픈 소스 코드입니까? (0) | 2020.11.21 |
순환 대기열 / 래핑으로 ViewPager (0) | 2020.11.21 |
사용하지 않는 가져 오기 및 개체가 성능에 영향을 미칩니 까? (0) | 2020.11.21 |
FileWriter와 BufferedWriter의 Java 차이점 (0) | 2020.11.21 |