"증분 연결"이란 무엇입니까?


105

나는 마이크로 소프트의 MSDN과 웹의 모든 부분을 살펴 봤지만 여전히 그것이 무엇인지에 대해 정말 좋은 아이디어를 얻지 못했습니다.

완료된 프로그램이 실행 중 다른 시간에 DLL을로드한다는 의미입니까?

내가 완전히 벗어 났나요? :)


1
내가 GNU의 LD에 대한 대답을 추가하지만이 삭제 된, 여기에 유사 하나입니다 stackoverflow.com/questions/29391965/...
치로 틸리가郝海东冠状病六四事件法轮功

내용이 얼마나 좋은 상관없이 - 복사, 붙여 넣기 및 분기 나쁜이기 때문에 삭제 된 en.wikipedia.org/wiki/Don%27t_repeat_yourself

답변:


122

링크에는 소스 파일에서 빌드 된 모든 .obj 파일과 참조하는 모든 .lib 파일을 출력 (예 : .exe 또는 .dll)으로 패키징하는 작업이 포함됩니다.

증분 링크가 없으면 매번 처음부터이 작업을 수행해야합니다.

증분 링크는 exe / dll을 약간 변경하고 다시 컴파일 할 때 링커가 기존 exe / dll을 더 쉽게 업데이트 할 수있는 방식으로 연결합니다.

따라서 증분 링크를 사용하면 프로젝트를 더 빠르게 컴파일하고 연결할 수 있습니다.

이것이 가질 수있는 유일한 런타임 효과는 여기에 설명 된대로 exe / dll을 약간 더 크고 느리게 만들 수 있다는 것입니다.

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

편집 : Logan이 언급했듯이 증분 링크는 링크 타임 코드 생성 과도 호환되지 않으므로 가능한 성능 최적화가 손실됩니다.

개발 속도를 높이기 위해 디버그 빌드에 증분 링크를 사용하고 런타임 성능을 향상시키기 위해 릴리스 빌드에 대해서는 비활성화 할 수 있습니다.

지연로드 된 DLL은 다음과 같이 생각할 수 있습니다.

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


아, 링커가 항상 이랬다 고 생각 했어요! 따라서 종료 incremental linking하면 링커가 매번 처음부터 모든 것을 연결하게 될까요?
Russel

6
"실제로 이것의 효과는 걱정할 가치가 없을 것입니다." "일반"연결과 증분 연결의 차이는 런타임에 성능면에서 그리 크지 않을 수 있지만 증분 연결은 링크 타임 코드 생성과 호환되지 않아 성능에 큰 차이를 만들 수 있다는 점을 언급 할 가치가 있습니다.
Logan Capaldo

2
@Russel : 예, 그렇습니다. @Logan : 감사합니다. 제 답변을 업데이트했습니다.
Saxon Druce

그렇다면 프로덕션 빌드에 대해이 옵션을 꺼야한다는 의미입니까?
RBT

1
@RBT, 그래야합니다.
Ajay

15

또한 매우 중요한 점은 증분 링크가 Edit&Continue다시 시작하지 않고 즉시 코드를 편집하고 다시 컴파일 하기위한 전제 조건이라는 것입니다 .

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.