/LTCG (링크 타임 코드 생성)

전체 프로그램 최적화를 수행하거나 PGO(프로필 기반 최적화) 계측을 만들고, 학습을 수행하고, 프로필 기반 최적화 빌드를 만드는 데 사용합니다 /LTCG .

구문

/LTCG[:{INCREMENTAL|NOSTATUS|STATUS|OFF}]

이 옵션은 Visual Studio 2015부터 더 이상 사용되지 않습니다.

/LTCG:{PGINSTRUMENT|PGOPTIMIZE|PGUPDATE}

인수

INCREMENTAL
(선택 사항) 링커는 전체 프로젝트 대신 편집의 영향을 받는 파일에 전체 프로그램 최적화 또는 LTCG(링크 타임 코드 생성)만 적용하도록 지정합니다. 기본적으로 이 플래그는 지정된 경우 /LTCG 설정되지 않으며 전체 프로젝트 최적화를 사용하여 전체 프로젝트가 연결됩니다.

NOSTATUS | STATUS
(선택 사항) 완료된 링크 비율을 표시하는 진행률 표시기가 링커에 표시되는지 여부를 지정합니다. 기본적으로 이 상태 정보는 표시되지 않습니다.

OFF
(선택 사항) 링크 시간 코드 생성을 사용하지 않습니다. 링커는 컴파일된 /GL 모든 모듈을 해당 옵션 없이 컴파일된 것처럼 처리하고 MSIL 모듈로 인해 링크가 실패합니다.

PGINSTRUMENT
(선택 사항) 이 옵션은 Visual Studio 2015부터 더 이상 사용되지 않습니다. 대신 프로필 기반 최적화를 위해 계측된 빌드를 사용 /LTCG/GENPROFILE 하거나 /FASTGENPROFILE 생성합니다. 계측된 실행으로부터 수집되는 데이터는 최적화된 이미지를 만드는 데 사용됩니다. 자세한 내용은 프로필 기반 최적화를 참조하세요. 이 옵션의 짧은 형식은 .입니다 /LTCG:PGI.

PGOPTIMIZE
(선택 사항) 이 옵션은 Visual Studio 2015부터 더 이상 사용되지 않습니다. 대신 최적화된 이미지를 사용하고 /LTCG/USEPROFILE 빌드합니다. 자세한 내용은 프로필 기반 최적화를 참조하세요. 이 옵션의 짧은 형식은 .입니다 /LTCG:PGO.

PGUPDATE
(선택 사항) 이 옵션은 Visual Studio 2015부터 더 이상 사용되지 않습니다. 대신 최적화된 이미지를 사용하고 /LTCG/USEPROFILE 다시 빌드합니다. 자세한 내용은 프로필 기반 최적화를 참조하세요. 이 옵션의 짧은 형식은 .입니다 /LTCG:PGU.

설명

/LTCG 옵션은 링커에게 컴파일러를 호출하고 전체 프로그램 최적화를 수행하도록 지시합니다. 프로필 기반 최적화를 수행할 수도 있습니다. 자세한 내용은 프로필 기반 최적화를 참조하세요.

다음 예외를 제외하고 이전 PGO 초기화 조합 및 /GENPROFILE/USEPROFILE 옵션에서 지정되지 않은 링커 옵션을 PGO 조합 /LTCG/LTCG 에 추가할 수 없습니다.

PGO를 초기화하는 옵션과 /GENPROFILE 함께 /LTCG 지정된 링커 옵션은 사용하여 /LTCG/USEPROFILE빌드할 때 지정할 필요가 없으며 암시적입니다.

이 문서의 나머지 부분은 .에 의해 수행된 링크 타임 코드 생성에 /LTCG대해 설명합니다.

/LTCG 는 을 사용하여 /GL암시됩니다.

링커는 사용하거나 MSIL 모듈을 사용하여 /GL 컴파일된 모듈을 전달한 경우 링크 타임 코드 생성을 호출합니다(링커 입력으로 파일 참조.netmodule). 링커에 MSIL 모듈을 전달할 /GL 때 명시적으로 지정 /LTCG 하지 않으면 링커는 결국 이 상황을 감지하고 링크를 다시 /LTCG시작합니다. 가능한 가장 빠른 빌드 성능을 위해 링커에 MSIL 모듈을 전달할 /GL 때 명시적으로 지정 /LTCG 합니다.

더 빠른 성능을 위해 .를 사용합니다 /LTCG:INCREMENTAL. 이 옵션은 전체 프로젝트 대신 원본 파일 변경의 영향을 받는 파일만 다시 사용하도록 링커에 지시합니다. 이 옵션을 사용하면 필요한 연결 시간을 크게 줄일 수 있습니다. 이 옵션은 증분 연결동일한 옵션이 아닙니다. 이 옵션을 제거 /LTCG:INCREMENTAL 하면 빌드 시간과 디스크 사용률을 개선하는 옵션도 제거 /LTCGOUT 합니다.

/LTCG 와 함께 /INCREMENTAL사용할 수 없습니다.

, 또는 /Ox다음 최적화를 사용하여 /O1/O2/Og컴파일된 모듈을 연결하는 데 사용되는 경우 /LTCG 다음 최적화가 수행됩니다.

  • 모듈 간 인라인 처리

  • 프로시저 간 레지스터 할당(64비트 운영 체제만 해당)

  • 사용자 지정 호출 규칙(x86만 해당)

  • 작은 TLS 치환(x86만 해당)

  • 스택 이중 맞춤(x86만 해당)

  • 향상된 메모리 명확성(전역 변수 및 입력 매개 변수에 대한 보다 효율적인 간섭 정보)

참고 항목

링커는 각 함수를 컴파일하는 데 사용된 최적화를 확인하고 링크 타임에 동일한 최적화를 적용합니다.

/O2 이중 맞춤 최적화를 사용하고 /LTCG 발생합니다.

/O1 지정한 경우 /LTCG 이중 맞춤이 수행되지 않습니다. 애플리케이션의 대부분의 함수가 크기(예: pragma 사용)를 위해 컴파일된 몇 가지 함수를 사용하여 optimize 속도를 위해 컴파일되는 경우 컴파일러는 이중 맞춤이 필요한 함수를 호출하는 경우 크기에 최적화된 함수를 두 번 정렬합니다.

컴파일러가 함수의 모든 호출 사이트를 식별할 수 있는 경우 컴파일러는 명시적 호출 규칙 한정자를 무시하고 함수의 호출 규칙을 최적화하려고 합니다.

  • 레지스터의 매개 변수 전달

  • 맞춤을 위해 매개 변수 다시 정렬

  • 사용하지 않는 매개 변수 제거

함수 포인터를 통해 함수를 호출하거나 함수를 사용하여 /GL컴파일된 모듈 외부에서 함수를 호출하는 경우 컴파일러는 함수의 호출 규칙을 최적화하려고 시도하지 않습니다.

참고 항목

애플리케이션을 사용하고 /LTCG 다시 정의 mainCRTStartup하면 전역 개체가 초기화되기 전에 실행되는 사용자 코드와 관련된 예측할 수 없는 동작이 있을 수 있습니다. 이 문제를 해결하는 방법에는 세 가지가 있습니다. 다시 정의mainCRTStartup하지 않거나, 전역 변수 및 개체를 사용하여 /LTCG포함된 mainCRTStartup 파일을 컴파일하지 않거나, 전역 변수 및 개체를 정적으로 초기화하지 마세요.

/LTCG 및 MSIL 모듈

지정된 경우 /LTCG 링커를 사용하여 /GL 컴파일되고 /clr 링커에 대한 입력으로 사용할 수 있는 모듈입니다.

  • /LTCG 는 네이티브 개체 파일과 혼합된 네이티브/관리 개체 파일(사용하여 /clr컴파일됨)을 허용할 수 있습니다. /clr:pure/clr:safe 및 컴파일러 옵션은 Visual Studio 2015에서 더 이상 사용되지 않으며 Visual Studio 2017 이상에서는 지원되지 않습니다.

  • /LTCG:PGI 은 다음을 사용하여 /GL 컴파일된 네이티브 모듈을 허용하지 않습니다. /clr

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

전체 프로그램 최적화 속성은 을 비롯한 /LTCG여러 컴파일러 및 링커 옵션을 설정합니다. 이 속성을 사용하여 전체 빌드 구성에 대한 설정을 변경하는 것이 좋습니다. 프로젝트에 대한 전체 프로그램 최적화를 설정하려면 다음을 수행합니다.

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

  2. 구성 속성>일반 속성 페이지를 선택합니다.

  3. 전체 프로그램 최적화 속성을 수정합니다. 확인을 선택하거나 적용하여 변경 내용을 저장합니다.

메뉴 모음에서 빌드>프로필 기반 최적화선택하거나 프로젝트의 바로 가기 메뉴에서 프로필 기반 최적화 옵션 중 하나를 선택하여 특정 빌드에 적용 /LTCG 할 수도 있습니다.

링크 시간 코드 생성을 별도로 사용하도록 설정하거나 특정 링크 시간 코드 생성 옵션을 설정하려면 다음을 수행합니다.

  1. 프로젝트 속성 페이지 대화 상자를 엽니다.

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

  3. 링크 시간 코드 생성 속성을 다음 옵션 중 하나로 수정합니다.

    • 기본값
    • 빠른 링크 시간 코드 생성 사용(LTCG:증분)
    • 링크 시간 코드 생성 사용(LTCG)
    • 프로필 기반 최적화 - 계측(LTCG:PGInstrument)
    • 프로필 기반 최적화 - 최적화(LTCG:PGOptimize)
    • 프로필 기반 최적화 - 업데이트(LTCG:PGUpdate)
  4. 확인을 선택하거나 적용하여 변경 내용을 저장합니다.

링커에 링크 시간 코드 생성에 대한 진행률 표시기가 표시되는지 여부를 지정하려면 다음을 수행합니다.

  1. 프로젝트 속성 페이지 대화 상자를 엽니다.

  2. 구성 속성>링커>일반 속성 페이지를 선택합니다.

  3. 링크 상태 속성을 수정합니다. 확인을 선택하거나 적용하여 변경 내용을 저장합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

참고 항목

MSVC 링커 참조
MSVC 링커 옵션