/Os, /Ot(크기 우선 코드, 속도 우선 코드)
업데이트: 2007년 11월
EXE와 DLL의 크기를 최소화하거나 최대화합니다.
/Os
/Ot
설명
/Os(코드 크기 우선) 옵션은 속도보다 크기를 우선적으로 처리하도록 컴파일러에 지시하여 EXE 파일과 DLL의 크기를 최소화합니다. 그러면 컴파일러는 여러 C 및 C++ 구문을 기능이 유사한 기계어 코드 시퀀스로 만들 수 있습니다. 이러한 차이 때문에 크기와 속도를 상대적으로 조정해야 하는 경우가 있습니다. /Os 및 /Ot 옵션을 사용하면 크기와 속도 중에서 어떤 것을 우선적으로 고려할 것인지 지정할 수 있습니다.
/Ot(코드 속도 우선) 옵션은 크기보다 속도를 우선적으로 처리하도록 컴파일러에 지시하여 EXE 파일과 DLL의 속도를 최대화합니다. 이 옵션이 기본값입니다. 그러면 컴파일러는 여러 C 및 C++ 구문을 기능이 유사한 기계어 코드 시퀀스로 만들 수 있습니다. 이러한 차이 때문에 크기와 속도를 상대적으로 조정해야 하는 경우가 있습니다. /Ot 옵션은 속도 최대화 옵션(/O2/O1, /O2(크기 최소화, 속도 최대화))에 포함되어 있습니다. /O2 옵션은 여러 옵션을 결합하여 상당히 속도가 빠른 코드를 만듭니다.
/Os 또는 /Ot를 사용하는 경우 코드를 최적화하려면 /Og/Og(전역 최적화)를 지정해야 합니다.
참고: |
---|
프로파일링 테스트 실행에서 수집되는 정보는 /Ob, /Os 또는 /Ot를 지정할 때 적용되는 최적화를 재정의합니다. 자세한 내용은 프로필 기반 최적화를 참조하십시오. |
x86 Specific
다음 예제 코드에서는 코드 크기 우선 옵션(/Os)과 코드 속도 우선 옵션(/Ot) 사이의 차이점을 보여 줍니다.
참고: |
---|
아래에서는 /Os 또는 /Ot를 사용하는 경우 예상되는 동작에 대해 설명합니다. 그러나 아래 코드를 사용할 경우에는 컴파일러에서 코드를 최적화하는 방식이 릴리스에 따라 다를 수 있습니다. |
/* differ.c
This program implements a multiplication operator
Compile with /Os to implement multiply explicitly as multiply.
Compile with /Ot to implement as a series of shift and LEA instructions.
*/
int differ(int x)
{
return x * 71;
}
아래 기계어 코드처럼 DIFFER.c가 크기 우선 코드(/Os)로 컴파일될 경우, 컴파일러는 return 문의 곱셈 식을 짧지만 느린 코드 시퀀스를 만드는 곱셈으로 구현합니다.
mov eax, DWORD PTR _x$[ebp]
imul eax, 71 ; 00000047H
반대로, DIFFER.c가 코드 속도 우선(/Ot)으로 컴파일될 경우, 컴파일러는 return 문의 곱셈 식을 빠르지만 긴 코드 시퀀스를 만드는 일련의 shift와 LEA 명령으로 구현합니다.
mov eax, DWORD PTR _x$[ebp]
mov ecx, eax
shl eax, 3
lea eax, DWORD PTR [eax+eax*8]
sub eax, ecx
END x86 Specific
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 방법: 프로젝트 속성 페이지 열기를 참조하십시오.
C/C++ 폴더를 클릭합니다.
최적화 속성 페이지를 클릭합니다.
크기 또는 속도 속성을 변경합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- FavorSizeOrSpeed를 참조하십시오.