가장 좋은 방법은 시스템의 기본 프로세스 힙을 사용하지 않는 것입니다. 대신, 직접 새로운 메모리 힙을 신청하세요. 한 가지 유형의 데이터가 힙에 배치됩니다. 이는 자주 요청되고 공개되는 작은 데이터 조각에 적합합니다. 큰 데이터를 먼저 직접 malloc한 다음 자체 메모리 풀을 사용하여 관리할 수도 있습니다. 전자의 경우 Windows의 파일 관리자 탐색이 유용합니다. 예를 들어, 탐색된 디렉터리 트리 구조는 별도의 힙에 배치됩니다. HeapFree는 리프 노드를 반복해서 해제할 필요 없이 한 번에 전체 힙을 해제합니다. 두 번째, 예를 들어 libjpeg 자체에는 전용 메모리 풀이 있습니다.
메모리 할당자는 일반적으로 큰 메모리 섹션에 대해 OS에 미리 적용한 다음
malloc()
时标记一小段为已分配,free()
이 작은 섹션이 할당될 때마다 할당되지 않은 것으로 표시합니다.malloc/free의 순서는 일반적으로 임의적이므로 여러 번의 malloc/free 후에는 할당된 메모리와 할당되지 않은 메모리가 교대로 나타납니다. 예를 들어
分配1 -- 未分配1 -- 分配2 -- 未分配2
즉, 할당되지 않은 메모리는 하나씩 "조각화"됩니다.메모리 조각화의 단점:
추가 메모리 사용량: 할당되지 않은 전체 메모리 양이 충분하더라도 연속 메모리가 분리되지 않을 수 있습니다. 이때 OS에서 추가 메모리를 신청해야 합니다
캐시에 영향을 미칩니다: 캐시는 페이지를 기반으로 하며 페이지의 할당되지 않은 부분도 캐시를 차지합니다
가장 좋은 방법은 시스템의 기본 프로세스 힙을 사용하지 않는 것입니다. 대신, 직접 새로운 메모리 힙을 신청하세요. 한 가지 유형의 데이터가 힙에 배치됩니다. 이는 자주 요청되고 공개되는 작은 데이터 조각에 적합합니다.
큰 데이터를 먼저 직접 malloc한 다음 자체 메모리 풀을 사용하여 관리할 수도 있습니다.
전자의 경우 Windows의 파일 관리자 탐색이 유용합니다. 예를 들어, 탐색된 디렉터리 트리 구조는 별도의 힙에 배치됩니다. HeapFree는 리프 노드를 반복해서 해제할 필요 없이 한 번에 전체 힙을 해제합니다.
두 번째, 예를 들어 libjpeg 자체에는 전용 메모리 풀이 있습니다.
버디 알고리즘에 대해 배울 수 있습니다
이 PDF도 있습니다
열 수 없으면 벽을 넘어가세요
복잡하지 않은
malloc
实现就去看看dlmalloc
의 소스코드를 알고 싶습니다