2010-06-23 5 views
19

오늘은 컴파일 된 정적 라이브러리가 릴리스보다 훨씬 크다는 것을 알았습니다. 디버그보다 큽니다. 나는 그것이 매우 놀랍다는 것을 알았는데, 대부분의 경우 정확한 반대가 발생했기 때문이다 (내가 말할 수있는 한).릴리스 모드 정적 라이브러리는 디버그 모드 버전보다 훨씬 큽니다.

디버그 모드의 크기는 3MB를 약간 넘습니다 (상당히 큰 프로젝트 임).하지만 릴리스에서는 최대 6,5MB가됩니다. 누군가가 이것에 대한 이유가 무엇인지 말해 줄 수 있습니까? 정적 라이브러리 프로젝트에 대한 일반적인 Visual Studio (2008) 설정을 사용하고 있으며 빌드 구성 설정에서 거의 변경되지 않았습니다. 릴리스에서는/O2를 사용하고 "Favor size or speed"가 "Nothing"으로 설정되었습니다./O2 ("최대 속도") 최종 .lib가 모든 디버깅 정보가 포함 된 디버그 버전보다 훨씬 커질 수 있습니까?

편집 : 추가 정보 :
디버그 :
- 전체 프로그램 최적화 : 없음
없습니다 - 기능 수준 연결 가능 : 아니오

출시 :
- 전체 프로그램 최적화 : 링크시 사용 코드 생성
- 기능 수준 연결 사용 : 예

+1

무엇 "전체 프로그램 최적화"모두 구성에서 설정을 "연결 기능 수준"에 대한? – sharptooth

+0

정보를 업데이트했습니다. – PeterK

답변

28

차이점은 특히 링크 타임 코드 생성 때문입니다. MSDN의 Compilers - What Every Programmer Should Know About Compiler Optimizations에서 링크 타임 코드 생성 장을 읽으십시오 - 기본적으로 LTCG를 켜면 컴파일러가 정적 라이브러리에 훨씬 더 많은 데이터를 생성하므로 링커는 실제로 더 나은 컴퓨터 코드를 생성하기 위해 추가 데이터를 사용할 수 있습니다 실행 파일을 연결합니다.

디버그 구성에서 LTCG가 꺼져 있기 때문에 제작 된 라이브러리에는 추가 데이터가 없으므로 눈에 띄게 작습니다.

PS : Original Link (not working at 11/09/2015)

+3

감사합니다. 많이 설명했습니다! – PeterK

0

개인적으로 나는 본 적이 없다. se PDB는 디버그 PDB보다 클 수 있습니다. LIB에 대해서도 마찬가지입니다.

1

여기서 최적화가 문제가 될 수 있습니다. 특히, 자동으로 생성되는 inline 기능은 디버그보다 크지 만 릴리스가 빠릅니다.

관련 문제