절대 참조, 공유 라이브러리 및 위치 독립적 코드의 재배치에 대해 혼란스러워합니다. 나는 아직 개별 processess 주소 공간에 대해 충분히 알지 못한다고 가정한다.링커, 절대 참조 및 프로세스 주소 공간
필자의 저서에서 저자는 글로벌 변수/기능의 주소 인 런타임을 삽입하여 절대 기호 참조를 해결하는 링크에 대해 이야기합니다. 링커는 이것을 어떻게 알 수 있습니까? 내가 컴파일, 링크, 내 실행 파일을 만들고, N 개의 다른 시간을 실행할 수 있습니다. 나는 그것이 메모리의 동일한 장소에 매번로드되지 않을 것이라고 생각합니다. 그래서 링커가 어떻게 절대 런타임 주소를 알 수 있습니까? 변수/함수?
그래, 내가 생각했던거야. 그러나 이것은 질문을 제기합니다 : 모든 코드가 위치 독립적 인 이유는 무엇입니까? 프로그램이로드 될 때마다 동일한 가상 주소 공간을 갖는 경우 프로그램이 실제로로드되는 위치가 중요한 이유는 무엇입니까? 즉 모든 프로그램이 직위에 독립적이지 않아야합니까? – gone
나는 당신을 쫓고 있는지 잘 모르겠다. 그러나 실행 가능 코드의 사전 링크 개념과 위치 독립적 코드 등을 실행 파일의 주소 공간에 대한 사후 링크 개념과 혼합하는 것이 가능합니다. 개별 개체 파일에 대해 생성 된 코드는 재배치 또는 위치 독립적 일 수 있습니다. 전자는 재배치 프로세스를 사용하여 링커에서 주소 공간의 아무 곳에 나 배치 할 수 있습니다. 후자는 주소 공간의 아무 곳에 나 배치 할 수 있으므로 아무런 조치가 필요 없습니다. 이러한 개체가 배치되면 (함께 링크 된 경우) 실행 파일에는 고정 된 가상 주소 공간이 있습니다. – Ziffusion
확인. 그래서 공유 라이브러리에 대해 위치 독립적 코드에'-fPIC' 플래그를 사용하면 어떻게 될까요? 공유 라이브러리는 실제 메모리에 한 번만 존재하지만 여러 프로세스의 가상 주소 공간에있는 임의의 위치에 매핑 될 수 있습니까? – gone