2009-09-14 4 views
1

Windows에서 rebase는 dll의 기본로드 위치를 변경하며 읽은 적이 있으므로 응용 프로그램로드 시간이 크게 감소 할 수 있습니다. Linux 및/또는 gcc에 비슷한 개념이 있습니까?linux/gcc에 rebase (dll) 명령이 있습니까?

답변

1

제 경험상 리베이스는 Windows에서 많은 도움이되지 않습니다. 아마 dll의 크기가 작을수록 더 많은 도움이되었지만 지금은 하드 드라이브의 I/O 성능에 의해 제한 될 가능성이 높습니다.

Linux의 공유 라이브러리는 Windows의 공유 라이브러리와 상당히 다릅니다. 나는 리베이스와 관련하여 비슷한 개념이 있다고 생각하지 않는다. 공유 라이브러리 및 동적로드에 대한 자세한 내용을 참조하십시오. here.

위치 독립적 코드를 사용하는 한 Linux에서 리베이스가 필요없는 이유는 여기에 또 다른 링크 Dynamic Linking이 나와 있습니다. Windows에서는이 기능을 사용할 수 없으므로 런타임에 리베이스가 발생해야합니다. Windows에서 리베이스하는 것은 모든 시스템에서 차이를 만들지는 못하며, 프로그램을 실행할 때 dll의 기본 기본 주소가 사용되지 않는 시스템 일뿐입니다.

+0

10 살짜리 기사를 읽었으므로 몇 가지 사항이 거의 확실하게 바뀌 었습니다. – Les

+0

@Les : ELF 형식이 도입 된 이후로 변경된 것은 아무것도 없었으며 1996 년 중반에 끝났습니다 (Linux 2.0은 이전 형식을 지원하지 않습니다). –

1

일부 배포판은 prelink과 비슷합니다. 천천히 채택되고있는 DT_GNU_HASH은 또한 작업 속도를 향상시킵니다.

모든 실행 파일과 공유 라이브러리를 검사하고로드 시간 재배치를 피하기 위해 공유 라이브러리의 최적로드 주소를 확인하고 수정하려고합니다. 로드 시간 재배치는 응용 프로그램 시작 속도를 늦출 수 있고 더 많은 메모리를 사용할 수 있습니다. "문제"는 Windows보다 훨씬 적습니다.

http://people.redhat.com/jakub/prelink.pdf에는 사전 연결이 어떻게 도움이되는지 알려줍니다.

+0

이 프로젝트는 기본적으로 나에게 죽은 것처럼 보입니다. 이것도 PIC를 사용하는 공유 라이브러리에 전혀 영향을 미치지 않습니까? –

관련 문제