glibc 메모리 할당: 경기장 및 디버깅

glibc 메모리 할당: 경기장 및 디버깅

glibc의 최신 버전(2.12 기준)에는 MALLOC_ARENA_MAX 및 MALLOC_PER_THREAD를 조정할 수 있습니다.

질문:

  1. MALLOC_PER_THREAD=0과 MALLOC_ARENA_MAX=1 사이에 차이가 있나요? 최신 glibc는 여전히 MALLOC_PER_THREAD를 지원합니까?

  2. Arenas는 가상 메모리 사용량을 늘립니다. 32비트 커널에 적합합니까?

  3. 단일 코어 CPU(가상 게스트)에서도 작동합니까?

  4. 메모리 검사를 활성화하면

MALLOC_CHECK_=3

glibc는 기본 디버그 할당자 또는 기본 할당자를 사용합니까?

옛날 옛적에 glibc에 대해 읽고 일종의 디버깅을 사용하여 일반 할당자 대신 기본 할당자를 사용했지만... 문서를 찾을 수 없습니다.

답변1

  1. 내가 이해한 바에 따르면 MALLOC_PER_THREAD이는 새로운 스레드별 할당자를 활성화하기 위해 RHEL에 제공되는 임시 구성 손잡이입니다(참조:해당 CentOS 릴리스 노트더 알아보기). 현재 버전에서는 더 이상 사용할 수 없으며 glibc새 할당자는 2.15에서 기본 할당자가 되었습니다(제 생각에는). 설정은 MALLOC_ARENA_MAX=1비슷한 효과를 가지지만 이 경우 "새" 할당자의 다른 부분이 여전히 활성화되어 있기 때문에 엄격하게 동일하지 않을 수 있는 하나의 경기장만 있을 수 있음을 의미합니다.

  2. 예, 32비트 커널에서 작동하지만 기본 조정은 다릅니다( M_ARENA_TEST32비트 시스템에서는 2, 다른 시스템에서는 8).

  3. 단일 코어 시스템에서 여러 아레나를 사용하는 것은 별로 의미가 없을 수 있지만 기본 튜닝에서는 이를 고려해야 합니다(아레나의 하드 제한은 일반적으로 사용 가능한 CPU 수의 배수입니다).

  4. M_CHECK_ACTION=3이것이 이제 기본값이므로 메모리 검사를 활성화하면 기본 할당자가 사용됩니다.

이에 대한 사용자 수준 문서는 다음 위치에 있습니다.남자 말롭.

glibc 2.26새로운 스레드별 캐시가 있어야 합니다.,은닉처, 그러나 배포가 가능하려면 분명히 시간이 걸릴 것입니다. (출시 예정일은 올해 8월 1일입니다.)

관련 정보