2012-09-28 1 views

답변

19

매우 구체적이고 일반적으로 우려 할 필요는 없지만 그렇습니다.

-rdynamic 옵션은 런타임에 일반적으로 필요하지 않은 기호 테이블에 기호를 추가하도록 링커에 지시합니다. 즉, 동적 링커가 심볼 해석을 위해 런타임에 제거해야하는 심볼이 더 많거나 많을 수 있음을 의미합니다.

특히, GNU 기반 시스템의 심볼 테이블 검색은 해시를 사용하여 구현되므로 더 많은 심볼을 포함하면 해시 충돌이 발생할 가능성이 높아집니다. 해시 테이블에서 충돌하는 모든 symols가 목록에 있으므로 실행 시간 링커는 목록을 탐색하고 각 심볼 이름을 memcmp를 사용하여 비교해야합니다. 긴 기호를 갖는 해시 의미에서 더 많은 기호가 충돌하므로 각 동적 기호를 해결하는 데 더 많은 시간이 걸립니다.

이 상황은 C++의 경우 C가 약간 나빠지며 클래스 이름으로 인해 앞에 동일한 심볼 이름이 여러 개 있습니다.

실제로 이것은 기호가 처음 사용되었을 때만 영향을 미치므로 응용 프로그램이 매우 크고 많은 기호가 포함되어 있지 않으면 느껴지지 않습니다.

아주 드문 경우이지만 응용 프로그램이 큰 경우 prelinking과 같은 트릭을 사용하여 오버 헤드를 극복 할 수 있습니다.

관련 문제