요즘 내 모든 파일이 충돌하지 않는 기본 주소를 갖는 것이 얼마나 중요합니까?
레이몬드
1 월 20 일, 2017
그 날로 돌아가서,당신이 할 것을 권고받은 것들 중 하나는 그들이 모두 겹치지 않는 주소 범위를 가지도록 리베이스하여 런타임 재배치 비용을 피하는 것이 었습니다. 이 요즘 여전히 중요합니까?
이 상황은 좋은 조언이 잘못된 조언이 될 때 알 수 있도록 이론적 근거와 함께 오는 것이 얼마나 중요한지 보여주는 또 다른 시연입니다.
리베이스의 이유는 다음과 같습니다. 즉,각 프로세스가 동일한 복사본을 가져 오기 때문에 프로세스 간에 페이지를 공유 할 수 있습니다. (물론 누군가가 페이지에 글을 쓰고 공유 사본과 다른 복사본을 만들면 공유가 중지됩니다.)
경우 DLL 로드할 수 없음에 원하는 주소,다음 이미지는 이전,그리고 전체로 이전 DLL 은 지금에 의해 백업됩 페이지일이다.1 이 작업은 상대적으로 비용이 많이 드는 작업입니다. 또한,두 개의 프로세스가 동일한 위치로 재배치하기 위해 임의의 우연에 의해 재배치될 경우,재배치된 이미지를 공유하려고 시도하지 않는다. 페이지 파일에 여러 복사본이 있을 것입니다.
이 동적 재배치의 비용은 리베이스가 피하려고 시도하는 것입니다. 이것을”재배치 형벌이라고 부르 자.”
의사 임의 주소에서 로드할 수 있습니다. 따라서 놀라운 우연의 일치의 경우에만 기본 주소에 로드됩니다.
좋아,그래서 여전히 적용되는지 확인하기 위해 이론적 근거로 돌아 가자.
기본 기본 주소에서 로드하는 데 재배치 위약금이 발생합니까? 하지만,커널이 이 문제를 해결해 주므로,초기 로드 시 전체 딜을 재배치하지 않아도 됩니다. 이 경우 이전 패널티가 없습니다.
하지만 다른 이유로 딜이 재배치되면 어떻게 될까요? 예를 들어,프로세스가 이미 해당 위치에 다른 것을 할당했기 때문에 프로세스에서 선택한 기본 주소를 사용할 수 없는 것일 수 있습니다. 이 경우,기존의 재배치가 이루어져야,당신은 재배치 벌금을 지불.
아,하지만 여기에 있습니다.이 시나리오에서는 사용할 수 있는 기본 주소 중에서 기본 주소를 선택합니다.3
좋아,그래서 당신은 여전히 충돌 상황에 들어갈 수 있지만,당신은 정말 그것을 작동해야합니다. 예를 들어,하나의 프로세스로 로드할 수 있습니다. 그런 다음 두 번째 프로세스를 시작,의도적으로(충돌을 강제로)해당 주소에 메모리를 할당 하 고 다음 로드 합니다. 이 경우 재배치 될 것입니다. 이 응용 프로그램은 당신에게 아름다운 욕실 꾸미기의 갤러리를 보여줍니다.
그럼,이야기가 무엇인지 보자. 리베이스 또는 리베이스?따라서 기본 주소를 무시하고 임의의 의사 선택 위치로 재배치할 수 있습니다.
리베이스는 효과가 없지만 상처도 주지 않습니다.
어떤 이유로 든 비활성화되어 있기 때문에 리베이스가 도움이 될 것입니다.
요즘에는 리베이스가 없는 시스템을 찾기가 정말 힘들기 때문에 압도적 다수의 경우에 리베이스가 도움이 되지 않습니다. 그러나 그 소멸 할 정도로 작은 비율의 경우,리베이스가 도움이됩니다.
결론:그것은 단지 경우에,리베이스를 다치게하지 않습니다,하지만 보수는 매우 드문 것을 이해. 기본 주소 충돌이 발생하지 않도록 하는 작업을 수행할 수 있습니다. 그것은 거의 모든 실제 시나리오를 다룰 것입니다. 이 응용 프로그램은 당신에게 아름다운 욕실 꾸미기의 갤러리를 보여줍니다. 그것은 단지 재배치 페널티 킥으로 인해 조금 느리게 실행할 수 있습니다.
1 보다 정확하게는 픽스가 포함된 모든 페이지가 페이지 파일에 저장됩니다. 우리는이 미세한 점을 지난 번에 논의.
2 좋아요,세 번째 경우가 있습니다. 그러나 다시,이것은 당신이 전에 가지고 있던 것보다 나쁘지 않습니다:당신이 기본 주소를 다 써 버리면,그것은 모든 사람 자신을위한 것입니다. 커널은 새로운 델이 로드될 때마다 큰 주소 공간을 확보해야 합니다.따라서 시스템 전체를 볼 수 있는 반면,수동 리베이스는 프로세스에 로드된 모든 데 이터를 알아야 하며,여러 벤더에서 기본 주소를 조정하는 것은 일반적으로 불가능합니다.
레이몬드 첸
따르다
Leave a Reply