2010-07-28 3 views
84

나는 MS의 MSDN과 모든 웹 사이트를 살펴 봤지만 아직도 그게 무엇인지에 대해 정말 좋은 생각을 갖지 못했다."증분 링크"란 무엇입니까?

완성 된 프로그램이 실행 중 다른 시간에 DLL을로드한다는 의미입니까? 실행시 한 번에 모든 DLL이로드됩니다.

나는 완전히 벗어 났습니까? :)

답변

97

연결이란 소스 파일과 참조하는 .lib 파일을 출력 (예 : .exe 또는 .dll)에 빌드 한 모든 .obj 파일을 함께 패키징하는 것입니다.

증분 연결이 없으면 매번 처음부터 다시 시작해야합니다.

증분 링크는 작은 변경을 수행하고 다시 컴파일 할 때 링커가 기존 exe/dll을 쉽게 업데이트 할 수 있도록 exe/dll을 연결합니다.

따라서 증분 링크를 사용하면 프로젝트를 컴파일하고 링크하는 속도가 빨라집니다.

http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx

편집 : 로건에서 언급 한 바와 같이, 증분 링크도 호환되지가있을 수 있습니다

유일한 런타임 효과는 여기에 설명한 기능으로, 당신의 EXE/DLL이 약간 더 크고 더 느리게 만들 수 있다는 것입니다 link time code generation - 따라서 가능한 성능 최적화가 손실됩니다.

개발 속도를 높이려면 디버그 빌드에 증분 링크를 사용하고 런타임 성능을 높이려면 릴리즈 빌드에 대해서는 비활성화하십시오. 없이, possibily 코드를 편집하고 즉석에서 다시 컴파일하기 -

또한 http://msdn.microsoft.com/en-us/library/151kt790.aspx

+0

아, 나는 링커가 항상 이것을했다고 생각했습니다! 그래서'incremental linking'을 종료하면 링커는 매번 처음부터 모든 것을 링크하게 될 것입니다. – Russel

+6

"실제로 이것의 효과는 걱정할 가치가 없을 것입니다." "정상적인"링크와 증분 링크의 차이는 런타임에 현저한 성능이 아닐 수도 있지만 점진적 링크는 링크 시간 코드 생성과 호환되지 않으므로 성능 차이가 크게 벌어 질 수 있습니다. –

+2

@Russel : 가능합니다. @ Logan : 고마워, 나는 나의 대답을 업데이트했다. –

10

이 매우 중요한 증분 링크 Edit&Continue의 전제 조건 :

이 지연 DLL을 당신이 생각하고 무엇을 할 수로드 다시 시작합니다.

따라서 디버그 빌드에는 있지만 빌드는 릴리스하지 않는 것이 좋습니다.