가능한 중복 :
How is heap and stack memories managed, implemented, allocated?일반적으로 힙은 어떻게 구현됩니까?
안녕하세요, 내 질문에 힙이 아닌 데이터 구조,하지만 동적 메모리 할당에 사용되는 메모리 영역에 관한 것입니다.
C (또는 C++의 경우)와 코드 깊이의 어딘가에 프로그램을 작성한다고 가정하면 malloc()을 호출하거나 C++의 경우 new 연산자를 호출합니다. 이제 할당 된 메모리의 위치는 무엇입니까? 컴파일러 (링커?)가 힙으로 사용되는 데이터 세그먼트를 추가합니까? 해당 세그먼트의 크기는 어떻게 결정됩니까? 전체 "힙 세그먼트"보다 큰 메모리 덩어리를 할당하려고하면 어떻게됩니까? 힙이 확장됩니까? 그렇다면 어떻게?
그렇다면 보호 기능은 어떻게 작동합니까? 메모리를 동적으로 할당 할 때 프로세스 만이 프로세스에 액세스 할 수 있습니다. 다른 프로세스가 읽기/쓰기 작업을 수행하려고하면 오류가 발생합니다. 페이지가 특정 프로세스에 속하는 것으로 표시되어 있습니까? –
@grigory, 아니요. 페이지는 페이지 테이블 (x86의 경우 P 또는 V 비트)에서 유효 또는하지 않음으로 표시됩니다. PTE의 R/W 비트도 있습니다. '활성'페이지 테이블 세트는 프로세스 컨텍스트 전환시 새로 활성화 된 프로세스의 전환으로 "전환"됩니다. 모든 프로세스는 고유 한 페이지 디렉토리 (== 페이지 테이블 집합, 페이지 집합 + 속성 세트 포함)를 가지고 있습니다. –
@Grigory : 내 프로세스의 페이지가 다른 프로세스에 존재하지 않습니다. 가상입니다. OS는 가상 페이지를 실제 페이지에 매핑합니다. 가상 메모리를 체크 아웃해야합니다. – Puppy