문제

저는 학생이고 역학 메모리 관리에 대해 더 알고 싶습니다.C ++의 경우 new () 연산자를 호출하면 Heap (Free Store) 아래에 메모리 블록을 할당 할 수 있습니다.사실, 나는 그것을 달성하는 방법에 대한 완전한 그림을 가지고 있지 않습니다.

몇 가지 질문이 있습니다. 1) OS가 메모리 블록을 할당 할 수있는 메커니즘은 무엇입니까?아시다시피, 첫 번째 적합, 가장 적합 및 가장 적합하지 않은 것과 같은 몇 가지 기본 메모리 할당 체계가 있습니다.OS는 이들 중 하나를 사용하여 힙 아래에 동적으로 메모리를 할당합니까?

2) Android, IOS, Window 등과 같은 다른 플랫폼의 경우 메모리 블록을 할당하기 위해 다른 메모리 할당 알고리즘을 사용합니까?

3) C ++의 경우 new () 또는 malloc () 연산자를 호출하면 메모리 할당자가 힙에 메모리 블록을 임의로 할당합니까?

누구나 나를 도울 수 있기를 바랍니다.

감사합니다

도움이 되었습니까?

해결책

malloc는 시스템 호출이 아니며 필요한 크기의 여유 메모리 부분에 대한 주소를 제공하기 위해 내부 구조 중 일부를 통과하는 라이브러리 (libc) 루틴입니다.해당 프로세스의 데이터 세그먼트 (즉, 사용할 수있는 가상 메모리)가 문제의 유전자 태그 코드 논리에 따라 "충분히 크지"않은 경우에만 시스템 호출을 수행합니다.(Linux에서 데이터 세그먼트를 확대하기위한 시스템 호출은 malloc입니다)

간단히 말해서, brk는 세분화 된 메모리 관리를 제공하는 반면 OS는 해당 프로세스에 사용할 수있는 더 거칠고 큰 메모리 청크를 관리합니다.

플랫폼이 다를뿐만 아니라 라이브러리도 다른 유전자 태그 코드를 사용합니다.일부 프로그램 (예 : malloc)은 자체 사용 패턴을 알고 있기 때문에 내부 할당자를 대신 사용하여 성능을 향상시킬 수 있습니다.

위키 백과의 malloc 에 대한 긴 기사가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top