2009-11-30 4 views
0

this 이 영역은 동적으로로드되는 라이브러리와 같은 파일을 매핑하기 때문에 이상적으로 자라야한다고 생각합니다. 이것은 RLIMIT_STACK과 힙 시작 사이의 mmap 영역을 시작하여 구현할 수 있습니다. 이 경우 어떤 문제가 발생할 것입니다.왜 메모리가 맵핑 된 영역이 리눅스에서 자라는가

성장하면 새로운 메모리 매핑 된 영역이 어떻게 생성됩니까? 가상 주소 공간에서 abc.so에 대한 코드를 매핑하고자한다면이 영역의 아래쪽에서 시작하여 sizeof (abc.so) 공간을 아래쪽 방향으로 만들고 맵 파일을 만들어야합니다. 이것이 어떻게 작동합니까?

답변

1

주소가 증가한다는 의미에서 다이어그램에서 "위로"와 "위로" 을 혼동하지 않으시겠습니까? 다이어그램 상단에 낮은 주소가 있습니다 [편집 : 아니 실제로, 하단에 주소가 낮은, 내 나쁜].

매핑 된 영역은 하위 주소쪽으로 커집니다. 왜 당신은 다른 방향으로 성장해야한다고 생각합니까? 파일과 힙이 주소 공간의 반대 방향으로 시작하여 서로 가까워지면 영역이 충돌하기 전에 주소 공간 사용을 최대화하십시오.

파일을 매핑 할 때 인접한 범위의 주소 을 파일로 백업합니다 (주소가 낮은 주소에서 높은 주소까지, 즉 ). 페이지에 액세스하면 페이지 오류가 발생하고 파일 내용이 메모리 페이지 프레임으로 복사됩니다.

+0

주소 0이 해당 다이어그램의 맨 아래에 있음을 확신합니다. –

+0

오른쪽이며 스택이 아래쪽 방향, 즉 더 낮은 주소 방향으로 커지고 있습니다. –

+0

눈이 먼 곳에서 제일 먼저 눈을 ...니다. 죄송합니다. 어쨌든 힙과 매핑 된 파일 영역이 블록으로 할당되어 있기 때문에 어떤 방식 으로든이 방법이 상당히 자의적입니다. –

관련 문제