2009-03-10 2 views
18

큰 VS 솔루션 (200 VC 프로젝트)에서이 스위치를 사용하면 얻을 수있는 이점은 무엇입니까?함수 수준 연결 (VC++의/Gy 스위치) - 무엇이 좋은가요?

나는 이것이 주로 결과 바이너리의 크기에 영향을 준다는 것을 알고 있습니다. 그러나 더 작은 바이너리를 제외하고 FLL은 프로젝트 간의 종속성을 줄이는 데 도움이 될 수 있습니까?

FLL은 일반적으로 빌드 시간에 어떤 영향을 줍니까?

VC의 FLL에 대한 교육 된 설명에 감사드립니다. MSDN의 설명은 매우 간단합니다.

+1

mwigdahl의 우수한 게시물에 추가하려면 다음을 수행하십시오. [here] (https://ribosome.helixcommunity.org/2005/devdocs/FuncLevelLinking) g ++ 용 FLL을 달성하는 방법을 설명하는 링크 -이 기능을 사용하면 통찰력. – dirkgently

답변

26

MSDN의 설명을 링크 했으므로/Gy는 모든 기능이 자체 COMDAT에 패키지되어 있음을 확인합니다. 이 기능의 주요 이점은 동일한 기능을 가진 링커가 모두 하나의 실제 코드 ("COMDAT 접기")로 축소 할 수 있다는 것입니다. 동일한 기능이 많은 경우 매우 큰 영향을 미칠 수 있습니다. 이는 템플릿에 많은 최신 C++을 작성하는 경우가 많습니다.

참조되지 않은 COMDAT의 COMDAT 접기 및 제거로 인해 결과로 생성되는 실행 파일의 크기가 작기 때문에/Gy의 다른 효과는 없습니다. 구체적으로 말하면, 프로젝트 간 의존성을 줄이는 데 도움이되지 않습니다.

비용은 컴파일 시간이 약간 증가합니다 (다른 최적화 프로그램 플래그와 유사). 일반적으로 알 수없는 내용입니다.

+0

응용 프로그램 A가 C에서 기호 F3을 참조하는 B에서 F2 함수를 사용하여 동일한 COMDAT 섹션에/Gy없이 상주하는 정적 라이브러리 B의 함수 F1을 참조하면 A와 C 사이의 종속성이 생깁니다. 필요하다. A와 B가 정의 된 C에 대한 프로젝트 종속성이없는 경우 A가 F3을 참조하는 코드 경로가 없더라도 A는 컴파일되지 않으며/Gy로 막을 수 있습니다. 잘못인가? –