2011-10-18 2 views

답변

6

구현에 달려 있지만 일반적으로 링커가 해결합니다. 컴파일 된 각 변환 단위는 링커가 중복을 예상하고 받아 들여야한다는 것을 알 수 있도록 어떤 식 으로든 플래그가 지정된 함수의 복사본을 포함하는 객체 파일을 생성합니다. 링커는 그 중 하나를 포함하고 나머지는 버리고 함수에 대한 참조를 해결합니다.

+0

라이브러리는 어떻게됩니까? 아니면 멀리 갈 거니? –

+0

신경 쓰지 마라, 난 그냥 아무런 차이가 없다는 것을 깨달았다. –

+0

@Let_Me_Be : 정적 라이브러리는 일반적으로 객체 파일의 모음이므로 나중에 프로그램에 링크 할 때 해결할 함수의 사본이 여러 개 포함될 것입니다. 공유 라이브러리는 일반적으로 프로그램처럼 링크되어 있으므로 여러 복사본을 제거 할 수 있습니다. –

4

간단한 전략 : 이러한 inline 함수가 정의 될 때마다 정상적인 함수 인 것처럼 시간을 객체화하도록 컴파일하십시오. 그런 다음 링크시에 중복 기능을 감지하고 제거하여 각 사본을 하나씩 남겨 둡니다. 이것은 C++ 컴파일러가 10 년 전 (템플릿의면에서도) 작업했던 방식입니다. 요즘 어떻게하는지 모르겠습니다.

관련 문제