/LTCG
(링크 타임 코드 생성)
전체 프로그램 최적화를 수행하거나 PGO(프로필 기반 최적화) 계측을 만들고, 학습을 수행하고, 프로필 기반 최적화 빌드를 만드는 데 사용합니다 /LTCG
.
구문
/LTCG
[:
{INCREMENTAL
STATUS
OFF
|NOSTATUS
||}]
이 옵션은 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
여러 컴파일러 및 링커 옵션을 설정합니다. 이 속성을 사용하여 전체 빌드 구성에 대한 설정을 변경하는 것이 좋습니다. 프로젝트에 대한 전체 프로그램 최적화를 설정하려면 다음을 수행합니다.
프로젝트 속성 페이지 대화 상자를 엽니다. 자세한 내용은 컴파일러 및 빌드 속성 설정을 참조 하세요.
구성 속성>일반 속성 페이지를 선택합니다.
전체 프로그램 최적화 속성을 수정합니다. 확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.
메뉴 모음에서 빌드>프로필 기반 최적화를 선택하거나 프로젝트의 바로 가기 메뉴에서 프로필 기반 최적화 옵션 중 하나를 선택하여 특정 빌드에 적용 /LTCG
할 수도 있습니다.
링크 시간 코드 생성을 별도로 사용하도록 설정하거나 특정 링크 시간 코드 생성 옵션을 설정하려면 다음을 수행합니다.
프로젝트 속성 페이지 대화 상자를 엽니다.
구성 속성>링커>최적화 속성 페이지를 선택합니다.
링크 시간 코드 생성 속성을 다음 옵션 중 하나로 수정합니다.
- 기본값
- 빠른 링크 시간 코드 생성 사용(LTCG:증분)
- 링크 시간 코드 생성 사용(LTCG)
- 프로필 기반 최적화 - 계측(LTCG:PGInstrument)
- 프로필 기반 최적화 - 최적화(LTCG:PGOptimize)
- 프로필 기반 최적화 - 업데이트(LTCG:PGUpdate)
확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.
링커에 링크 시간 코드 생성에 대한 진행률 표시기가 표시되는지 여부를 지정하려면 다음을 수행합니다.
프로젝트 속성 페이지 대화 상자를 엽니다.
구성 속성>링커>일반 속성 페이지를 선택합니다.
링크 상태 속성을 수정합니다. 확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- LinkTimeCodeGeneration을(를) 참조하세요.