다음을 통해 공유


/OPT(최적화)

LINK가 빌드하는 동안 수행할 최적화를 제어합니다.

구문

/OPT:{REF | NOREF}
/OPT:{ICF[=반복] | NOICF}
/OPT:{LBR | NOLBR}

인수

REF | NOREF

/OPT:REF 는 참조 되지 않는 함수와 데이터를 제거합니다./OPT:NOREF 는 참조되지 않는 함수 및 데이터를 유지합니다.

/OPT:REF를 사용하도록 설정하면 LINK는 COMDAT라고 하는 참조되지 않은 패키지 함수 및 데이터를 제거합니다. 이러한 최적화를 전이적 COMDAT 제거라고 합니다. /OPT:REF 옵션은 증분 연결도 사용하지 않도록 설정합니다.

클래스 선언 내에 정의된 인라인 함수 및 멤버 함수는 항상 COMDAT입니다. 개체 파일의 모든 함수는 /Gy 옵션을 사용하여 컴파일되는 경우 COMDAT로 만들어집니다. COMDAT__declspec(selectany)에 데이터를 배치 const 하려면 . 제거 또는 접기를 위해 데이터를 지정하는 방법에 대한 자세한 내용은 selectany를 참조 하세요.

기본적으로 /OPT:NOREF 또는 /DEBUG를 지정하지 않는 한 링커에서 /OPT:REF를 사용하도록 설정합니다. 이 기본값을 재정의하고 프로그램에서 참조되지 않은 COMDAT를 유지하려면 /OPT:NOREF를 지정합니다. /INCLUDE 옵션을 사용하여 특정 기호 제거를 재정의할 수 있습니다.

/DEBUG를 지정하면 /OPT의 기본값은 NOREF이고 모든 함수는 이미지에 유지됩니다. 이 기본값을 재정의하고 디버그 빌드를 최적화하려면 /OPT:REF를 지정합니다. 이렇게 하면 실행 파일의 크기를 줄일 수 있으며 디버그 빌드에서도 유용한 최적화가 될 수 있습니다. 디버그 빌드에서 동일한 함수를 유지하려면 /OPT:NOICF도 지정하는 것이 좋습니다. 이렇게 하면 스택 추적을 읽고 다른 방식으로는 함께 정리될 함수에서 중단점을 쉽게 설정할 수 있습니다.

ICF[=반복] | NOICF

ICF[=반복]을 사용하여 동일한 COMDAT 접기를 수행합니다. 중복 COMDAT는 링커 출력에서 제거될 수 있습니다. 선택적 반복 매개 변수는 중복 기호를 트래버스하는 횟수를 지정합니다. 기본 반복 횟수는 1입니다. 추가 반복에서 이전 반복의 정리를 통해 발견되지 않은 중복 항목을 더 많이 찾을 수도 있습니다.

기본적으로 /OPT:NOICF 또는 /DEBUG를 지정하지 않는 한 링커에서 /OPT:ICF를 사용하도록 설정합니다. 이 기본값을 재정의하고 프로그램에서 COMDAT가 접히는 것을 방지하려면 /OPT:NOICF를 지정합니다.

디버그 빌드에서 COMDAT 접기를 사용하도록 설정하려면 /OPT:ICF를 명시적으로 지정해야 합니다. 그러나 /OPT:ICF는 동일한 데이터 또는 함수를 병합할 수 있으므로 스택 추적에 나타나는 함수 이름을 변경할 수 있습니다. 또한 특정 함수에서 중단점을 설정하거나 디버거의 일부 데이터를 검사하는 것이 불가능할 수 있으며 코드를 한 단계씩 실행할 때 예기치 않은 함수로 전환할 수 있습니다. 코드의 동작은 동일하지만 디버거 프레젠테이션은 매우 혼란스러울 수 있습니다. 따라서 더 작은 코드의 장점이 이러한 단점보다 크지 않으면 디버그 빌드에서 /OPT:ICF를 사용하지 않는 것이 좋습니다.

참고 항목

/OPT:ICF는 동일한 주소를 다른 함수 또는 읽기 전용 데이터 멤버(즉, const /Gy를 사용하여 컴파일할 때 변수)에 할당할 수 있으므로 함수 또는 읽기 전용 데이터 멤버에 대한 고유 주소에 의존하는 프로그램을 중단시킬 수 있습니다. 자세한 내용은 /Gy(함수 수준 링크 사용)를 참조하세요.

LBR | NOLBR

/OPT:LBR/OPT:NOLBR 옵션은 ARM 이진 파일에만 적용됩니다. 특정 ARM 프로세서 분기 명령에는 범위가 제한되어 있으므로 링커가 범위를 벗어난 주소로의 점프를 감지하면 분기 명령의 대상 주소를 실제 대상을 대상으로 하는 분기 명령이 포함된 코드 "island"의 주소로 바꿉니다. /OPT:LBR을 사용하여 긴 분기 명령의 검색 및 중간 코드 섬 배치를 최적화하여 전체 코드 크기를 최소화할 수 있습니다. /OPT:NOLBR 은 링커에 최적화 없이 긴 분기 명령이 발견되면 코드 아일랜드를 생성하도록 지시합니다.

증분 연결을 사용하도록 설정하지 않으면 기본적으로 /OPT:LBR 옵션이 설정됩니다. 증분 링크가 아닌 긴 분기 최적화를 원하는 경우 /OPT:NOLBR을 지정합니다. /OPT:LBR 옵션은 증분 연결을 사용하지 않도록 설정합니다.

설명

명령줄에서 사용하는 경우 링커는 기본적으로 /OPT:REF,ICF,LBR로 설정됩니다. /DEBUG를 지정하면 기본값은 /OPT:NOREF,NOICF,NOLBR입니다.

/OPT 최적화는 일반적으로 이미지 크기를 줄이고 프로그램 속도를 높입니다. 이러한 개선 사항은 대규모 프로그램에서 상당할 수 있으므로 소매 빌드에 대해 기본적으로 사용하도록 설정됩니다.

링커 최적화는 미리 추가 시간이 걸리지만, 최적화된 코드는 링커가 수정할 재배치가 적고 더 작은 최종 이미지를 만드는 시간도 절약하며 PDB에 처리하고 쓸 디버그 정보가 적으면 더 많은 시간을 절약할 수 있습니다. 최적화를 사용하도록 설정하면 분석의 작은 추가 비용이 더 작은 이진 파일을 통과하는 링커의 시간 절감에 따른 오프셋보다 많을 수 있으므로 전체적으로 연결 시간이 더 빨라질 수 있습니다.

/OPT 인수는 쉼표로 구분하여 함께 지정할 수 있습니다. 예를 들어 /OPT:REF /OPT:NOICF 대신 /OPT:REF,NOICF를 지정할 수 있습니다.

/VERBOSE 링커 옵션을 사용하여 /OPT:REF에서 제거된 함수와 /OPT:ICF에 의해 접힌 함수를 볼 수 있습니다.

/OPT 인수는 Visual Studio IDE에서 새 프로젝트 대화 상자를 사용하여 만든 프로젝트에 대해 설정되는 경우가 많으며 일반적으로 디버그 및 릴리스 구성에 대한 값이 다릅니다. 프로젝트에서 이러한 링커 옵션에 대해 값이 설정되지 않은 경우 명령줄에서 링커가 사용하는 기본값과 다를 수 있는 프로젝트 기본값을 가져올 수 있습니다.

Visual Studio 개발 환경에서 OPT:ICF 또는 OPT:REF 링커 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.

  2. 구성 속성>링커>최적화 속성 페이지를 선택합니다.

  3. 다음 속성 중 하나를 수정합니다.

    • COMDAT 접기 사용

    • 참조

Visual Studio 개발 환경에서 OPT:LBR 링커 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.

  2. 구성 속성>링커>명령줄 속성 페이지를 선택합니다.

  3. 추가 옵션에 옵션을 입력합니다.

    /opt:lbr 또는 /opt:nolbr

프로그래밍 방식으로 이 링커 옵션을 설정하려면

참고 항목