메모리 풀

Memory pool

메모리 풀(고정 크기 블록 할당이라고도 함)은 malloc 또는 C++의 연산자 new와 유사동적 메모리 할당을 허용하는 메모리 관리용 풀사용합니다.이러한 실장은 블록크기가 다양하기 때문에 플래그멘테이션에 시달리기 때문에 성능상 실시간시스템에서 사용하는 것은 권장되지 않습니다.보다 효율적인 솔루션은 메모리 풀이라고 불리는 동일한 크기의 메모리 블록을 여러 개 사전 할당하는 것입니다.응용 프로그램은 런타임에 핸들로 표시되는 블록을 할당, 액세스 및 해방할 수 있습니다.

많은 실시간 운영 체제에서는 트랜잭션 처리 기능과 같은 메모리 풀을 사용합니다.

웹 서버 Nginx와 같은 일부 시스템에서는 메모리 풀이라는 용어를 사용하여 나중에 한꺼번에 할당 해제될 수 있는 가변 크기 할당 그룹을 나타냅니다.이것은 지역이라고도 합니다.지역 기반의 메모리 관리를 참조해 주세요.

심플한 메모리 풀 구현

예를 들어 단순한 메모리 풀 모듈은 컴파일 시에 모듈을 전개하는 애플리케이션에 최적화된 블록사이즈를 가진 3개의 풀을 할당할 수 있습니다.애플리케이션은, 다음의 인터페이스를 개입시켜 메모리를 할당, 액세스, 해방할 수 있습니다.

  • 풀에서 메모리를 할당합니다.이 함수는 필요한 블록이 들어가는 풀을 결정합니다.해당 풀의 모든 블록이 이미 예약된 경우 함수는 다음으로 큰 풀에서 블록을 검색합니다.할당된 메모리 블록은 핸들로 표현된다.
  • 할당된 메모리에 대한 액세스 포인터를 가져옵니다.
  • 이전에 할당된 메모리 블록을 해방합니다.
  • 예를 들어 핸들은 다음과 같이 구현될 수 있습니다.unsigned int모듈은 핸들을 풀 인덱스, 메모리 블록 인덱스 및 버전으로 나누어 내부적으로 해석할 수 있습니다.풀과 메모리 블록인덱스를 사용하면 핸들을 사용하여 대응하는 블록에 빠르게 접근할 수 있습니다.또한 새로운 할당 때마다 증분되는 버전에서는 메모리블록이 이미 해방된 핸들(핸들이 너무 오래 유지되어 발생한 원인)을 검출할 수 있습니다.

메모리 풀 vs malloc

혜택들

  • 메모리 풀을 사용하면 일정한 실행 시간으로 메모리를 할당할 수 있습니다.malloc을 사용하여 각 객체에 메모리를 할당하는 경우 풀 내의 수천 개의 객체에 대한 메모리릴리즈는 1개의 조작에 불과합니다.
  • 메모리 풀은 계층 트리 구조로 그룹화할 수 있으며, 루프 및 재귀같은 특수 프로그래밍 구조에 적합합니다.
  • 고정 크기 블록 메모리 풀에서는 할당된 블록의 크기와 같은 특성을 설명하는 각 할당에 대한 할당 메타데이터를 저장할 필요가 없습니다.특히 소규모 할당의 경우 상당한 공간 절약을 제공합니다.
  • 실시간 시스템에서 메모리 부족 오류를 방지할 수 있습니다.

결점

  • 메모리 풀을 전개하는 애플리케이션에 맞추어 메모리 풀을 조정할 필요가 있는 경우가 있습니다.

「 」를 참조해 주세요.

외부 링크