내 말은 이것이 항상 사실이라면 낮은 주소가 먼저 사용된 다음 주소가 증가되어 높은 주소에 액세스한다는 의미입니다. 순서가 바뀔 수 있나요?
답변1
정확한 컨텍스트를 지정하지 않았습니다. 그러나 이는 대부분의 일반적인 경우(예: x86)에 대해 답변할 수 있습니다.
- NULL 포인터가 역참조될 때 메모리 액세스를 방지하기 위해 일부 초기 주소 공간을 예약합니다.
- 그런 다음 메모리는 프로세스 시작 세부 정보를 기반으로 할당되며 런타임 로더, 해당 데이터, 기본 바이너리, 해당 데이터 등 간에 혼합될 수 있습니다. 이러한 모든 것은 일반적으로 VM 페이지 크기 단계 증분을 통해 할당됩니다.
- 그런 다음 동적 라이브러리, 페이지 기반 힙 할당 등에 큰 영역이 사용됩니다. - 다시 증분적으로 할당됩니다. 그러나 프로그램이 다중 스레드인 경우 커밋된 스레드 스택을 역순으로 할당합니다(x86을 포함한 대부분의 프로세서의 경우).
- 그런 다음 힙의 sbrk 기반 순차 할당을 사용할 수 있습니다.
- 그런 다음 메인 스레드 스택을 배치합니다. 할당은 역순으로 커밋될 수 있습니다(위 참조).
- 그런 다음 애플리케이션이 알아야 할 유일한 것은 명시적인 허가 없이 이 영역에 액세스해서는 안 된다는 것입니다.
따라서 거의 모든 프로그램에서 양방향 할당을 볼 수 있습니다.
이는 다른 아키텍처에서는 다를 수 있습니다.