Inside Dynamics 메모리 관리
-
28-10-2019 - |
문제
저는 학생이고 역학 메모리 관리에 대해 더 알고 싶습니다.C ++의 경우 new () 연산자를 호출하면 Heap (Free Store) 아래에 메모리 블록을 할당 할 수 있습니다.사실, 나는 그것을 달성하는 방법에 대한 완전한 그림을 가지고 있지 않습니다.
몇 가지 질문이 있습니다. 1) OS가 메모리 블록을 할당 할 수있는 메커니즘은 무엇입니까?아시다시피, 첫 번째 적합, 가장 적합 및 가장 적합하지 않은 것과 같은 몇 가지 기본 메모리 할당 체계가 있습니다.OS는 이들 중 하나를 사용하여 힙 아래에 동적으로 메모리를 할당합니까?
2) Android, IOS, Window 등과 같은 다른 플랫폼의 경우 메모리 블록을 할당하기 위해 다른 메모리 할당 알고리즘을 사용합니까?
3) C ++의 경우 new () 또는 malloc () 연산자를 호출하면 메모리 할당자가 힙에 메모리 블록을 임의로 할당합니까?
누구나 나를 도울 수 있기를 바랍니다.
감사합니다
해결책
malloc
는 시스템 호출이 아니며 필요한 크기의 여유 메모리 부분에 대한 주소를 제공하기 위해 내부 구조 중 일부를 통과하는 라이브러리 (libc
) 루틴입니다.해당 프로세스의 데이터 세그먼트 (즉, 사용할 수있는 가상 메모리)가 문제의 유전자 태그 코드 논리에 따라 "충분히 크지"않은 경우에만 시스템 호출을 수행합니다.(Linux에서 데이터 세그먼트를 확대하기위한 시스템 호출은 malloc
입니다)
간단히 말해서, brk
는 세분화 된 메모리 관리를 제공하는 반면 OS는 해당 프로세스에 사용할 수있는 더 거칠고 큰 메모리 청크를 관리합니다.
플랫폼이 다를뿐만 아니라 라이브러리도 다른 유전자 태그 코드를 사용합니다.일부 프로그램 (예 : malloc
)은 자체 사용 패턴을 알고 있기 때문에 내부 할당자를 대신 사용하여 성능을 향상시킬 수 있습니다.
위키 백과의 malloc 에 대한 긴 기사가 있습니다.