/LTCG(링크 타임 코드 생성)
업데이트: 2007년 11월
/LTCG[:NOSTATUS|:STATUS|:PGINSTRUMENT|:PGOPTIMIZE|:PGUPDATE]
설명
다음은 각 옵션에 대한 설명입니다.
:NOSTATUS | :STATUS(선택적)
링커에서 링크 완료율을 표시하는 진행률 표시기를 표시할지 여부를 지정합니다. 기본값은 이 상태 정보를 표시하지 않는 것입니다.:PGINSTRUMENT(선택적)
링커에서 응용 프로그램에 대한 계측된 테스트 실행을 준비하기 위해 .pgd 파일을 출력하도록 지정합니다. 선택적으로 /PGD를 지정하면 기본값이 아닌 이름 또는 위치를 사용하여 .pgd 파일을 만들 수 있습니다.계측된 실행에서 수집된 데이터는 최적화 이미지를 만드는 데 사용됩니다. 자세한 내용은 프로필 기반 최적화를 참조하십시오. 이 옵션의 약식 표현은 /LTCG:PGI입니다.
:PGOPTIMIZE(선택적)
링커에서 계측된 이진 데이터를 실행한 후 생성된 프로필 데이터를 사용하여 최적화된 이미지를 만들도록 지정합니다. 모든 입력 파일은 /LTCG:PGI에 지정한 파일과 동일해야 합니다. 자세한 내용은 프로필 기반 최적화를 참조하십시오. 이 옵션의 약식 표현은 /LTCG:PGO입니다.:PGUPDATE(선택적)
:PGINSTRUMENT 단계에서 지정한 내용에 입력 파일의 목록을 추가하거나 수정할 수 있도록 합니다. 그러나 모든 새 입력 파일은 프로필 기반 최적화를 사용하여 최적화되지 않습니다. 또한 수정된 입력 파일에서 해당 코드의 계측 단계에 수집된 프로필 데이터를 무효화하는 변경된 부분도 프로필 기반 최적화를 사용하여 최적화되지 않습니다. 자세한 내용은 프로필 기반 최적화를 참조하십시오. 이 옵션의 약식 표현은 /LTCG:PGU입니다.
설명
/LTCG 옵션을 사용하면 링커에서는 컴파일러를 호출한 후 전체 프로그램 최적화를 수행합니다. 프로필 기반 최적화를 수행할 수도 있습니다. 자세한 내용은 프로필 기반 최적화를 참조하십시오.
/LTCG:PGINSTRUMENT 실행에서 지정하지 않은 링커 옵션은 /LTCG:PGOPTIMIZE 또는 /LTCG:PGUPDATE 실행에서 추가로 지정할 수 없습니다. 그러나 다음과 같은 옵션은 예외입니다.
/LTCG:PGINSTRUMENT에 지정한 링커 옵션은 /LTCG:PGOPTIMIZE에 자동으로 적용되므로 지정할 필요가 없습니다.
이 항목의 나머지 부분에서는 /LTCG를 링크 타임 코드 생성의 관점에서 설명합니다.
/LTCG를 지정하면 /GL도 지정됩니다.
링커에 /GL로 컴파일된 모듈이나 MSIL 모듈이 전달되면 링커에서는 링크 타임 코드 생성을 호출합니다. 자세한 내용은 링커 입력 파일로 사용하는 .netmodule 파일을 참조하십시오. 링커에 /GL 또는 MSIL 모듈을 전달할 때 명시적으로 /LTCG를 지정하지 않으면 링커에서는 이를 감지하고 /LTCG를 사용하여 링크를 다시 시작합니다. 가장 빠른 빌드 성능을 얻으려면 링커에 /GL 및 MSIL 모듈을 전달할 때 /LTCG를 명시적으로 지정하십시오.
/LTCG는 /INCREMENTAL과 함께 사용할 수 없습니다.
/LTCG를 /Og, /O1, /O2 또는 /Ox 중 하나와 함께 사용하면 다음의 최적화 작업이 수행됩니다.
크로스 모듈 인라인
프로시저 간 레지스터 할당(64비트 운영 체제 전용)
사용자 지정 호출 규칙(x86 전용)
작은 TLS 치환(x86 전용)
스택 이중 할당(x86 전용)
메모리 명확성 향상(전역 변수 및 입력 매개 변수에 대한 자세한 충돌 정보)
/LTCG와 /Ogt를 사용하면 이중 할당 최적화가 수행됩니다.
/LTCG와 /Ogs를 지정하면 이중 할당이 수행되지 않습니다. 응용 프로그램의 함수 대부분은 속도 순으로 컴파일되고 일부 함수는 optimize pragma 등을 사용하여 크기 순으로 컴파일된 경우, 컴파일러에서는 크기 순으로 최적화된 함수가 이중 정렬을 필요로 하는 함수를 호출하면 이러한 함수를 이중 정렬하게 됩니다.
컴파일러가 함수의 모든 호출 사이트를 식별할 수 있는 경우 컴파일러는 함수에 대한 명시적 호출 규칙 한정자를 무시하고 함수 호출 규칙을 최적화하려고 합니다.
레지스터를 사용하여 매개 변수 전달
맞춤을 위해 매개 변수 순서 변경
사용되지 않는 매개 변수 제거
함수가 함수 포인터를 통해 호출되거나 /GL을 사용하여 컴파일된 모듈 외부에서 호출된 경우 컴파일러에서는 함수의 호출 규칙을 최적화하지 않습니다.
참고: |
---|
/LTCG를 사용하고 mainCRTStartup을 다시 정의한 경우 전역 개체가 초기화되기 전에 실행되는 사용자 코드와 관련된 예측할 수 없는 동작이 응용 프로그램에 나타날 수 있습니다. 이 문제를 해결하려면 mainCRTStartup을 다시 정의하지 않거나, mainCRTStartup을 포함하는 파일을 /LTCG를 사용하여 컴파일하지 않거나, 가능한 경우 전역 변수 및 개체를 정적으로 초기화해야 합니다. |
/LTCG와 MSIL 모듈
링커에 /LTCG를 지정한 경우 /GL 및 /clr로 컴파일된 모듈을 입력으로 사용할 수 있습니다.
/LTCG를 지정하면 네이티브 개체 파일, /clr로 컴파일된 혼합 네이티브/관리 개체 파일, /clr:pure로 컴파일된 순수 개체 파일 및 /clr:safe로 컴파일된 안전한 개체 파일을 사용할 수 있습니다.
/LTCG를 지정하면 Visual C++에서 /clr:safe /LN으로 생성하고 다른 Visual Studio 컴파일러에서 /target:module로 생성하는 안전한 .netmodule을 사용할 수 있습니다. /clr 또는 /clr:pure로 생성한 .netmodule은 /LTCG에서 사용할 수 없습니다.
/LTCG:PGI는 /GL 및 /clr로 컴파일된 네이티브 모듈이나 /clr:pure로 컴파일된 순수 모듈을 받아들이지 않습니다.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 프로젝트 설정 수정을 참조하십시오.
구성 속성 폴더를 클릭합니다.
일반 속성 페이지를 클릭합니다.
전체 프로그램 최적화 속성을 수정합니다.
빌드 메뉴에서 프로필 기반 최적화를 선택하거나 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭한 다음 프로필 기반 최적화 옵션 중 하나를 선택하는 방법으로 특정 빌드에 /LTCG를 적용할 수도 있습니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- WholeProgramOptimization을 참조하십시오.