mimalloc is a compact general purpose allocator with excellent performance.
이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.
mimalloc ("me-malloc"로 발음)은 뛰어난 성능 특성을 가진 범용 할당자입니다. 처음에는 Daan Leijen이 Koka 및 Lean 언어의 런타임 시스템을 위해 개발했습니다.
최신 릴리스: v3.3.2 (2026-04-29) 권장.
최신 v2 릴리스: v2.3.2 (2026-04-29) 안정.
최신 v1 릴리스: v1.9.10 (2026-04-29) 레거시.
mimalloc은 malloc의 드롭인 대체재이며 코드 변경 없이 다른 프로그램에서 사용할 수 있습니다. 예를 들어, 동적으로 링크된 ELF 기반 시스템(Linux, BSD 등)에서는 다음과 같이 사용할 수 있습니다:
> LD_PRELOAD=/usr/lib/libmimalloc.so myprogram
또한 Windows에서 기본 할당자를 동적으로 재정의하는 방법도 포함되어 있습니다. 설계의 주목할 만한 측면은 다음과 같습니다:
free 작업을 위한 하나의 목록과 동시 free 작업을 위한 다른 목록이 있습니다. 다른 스레드에서의 해제는 이제 스레드 간의 정교한 조정 없이 단일 CAS로 수행될 수 있습니다. 수천 개의 개별 자유 목록이 있으므로 경합은 자연스럽게 힙에 분산되며 단일 위치에서 경합할 가능성은 낮습니다. 이는 스킵 리스트와 같은 무작위 알고리즘과 매우 유사하며, 무작위 오라클을 추가하면 더 복잡한 알고리즘의 필요성이 제거됩니다.문서는 API의 전체 개요를 제공합니다. 기술 보고서에서 mimalloc의 설계에 대해 더 읽을 수 있으며, 자세한 벤치마크 결과도 포함되어 있습니다.
즐기세요!
mimalloc의 세 가지 유지 관리 버전이 있습니다. OS 메모리 처리 방식을 제외하고는 대부분 동일합니다. 새로운 개발은 주로 v3에서 이루어지며, v1과 v2는 보안 및 버그 수정으로 유지 관리됩니다.
v3.x, 개발 브랜치 dev3).v2.x, 개발 브랜치 dev2 및 main)v1.9.x, 개발 브랜치 dev). 가능하면 이 버전에 대해 PR을 보내주세요.v1.9.10, v2.3.2, v3.3.2: LLM 감사(@Zoxc)를 통한 다양한 버그 및 보안 수정. allow_thp가 2로 설정된 경우에만 최소 제거 크기를 자동으로 증가시킵니다. 모든 플랫폼에서 큰 OS 정렬을 활성화합니다(Windows에서 OS 큰 페이지 수정). Linux/macOS에서 커밋된 메모리 계정 수정. C 모드 사용 시 MSVC 원자 구현 업데이트. Emscripten 수정 업스트림. 적절한 원자적 do-once 구현.v1.9.9, v2.3.1, v3.3.1: 다양한 버그 및 보안 수정. Windows 종료 개선에 도움을 준 @jinpzhanAMD, @res2k, @GoldJohnKing, 그리고 다양한 문제를 찾아준 @Zoxc에게 특별히 감사드립니다.v1.9.8, v2.3.0, v3.3.0: github (바이너리) 릴리스 초기 지원, 수집 중 전체 페이지 방문 수정(성능), THP 정렬 수정(성능), Windows에서 arm64 크로스 컴파일 수정, 디버그 모드에서 가드 페이지 활성화, 항상 아레나 사이에 커밋되지 않은 영역 사용(보안), 정적 CRT로 Windows에서 malloc 등의 정적 오버로딩 활성화(@Noxybot), Windows에서 TLS 슬롯 누수 수정(v3), 정적으로 링크된 mimalloc으로 깔끔한 DLL 로드/언로드 활성화(v3), miheapdestroy에서 경쟁 조건 수정(v3), 기본적으로 할당된 객체와 별도로 페이지 메타 정보 배치(v3, 보안), emscripten용 C++ 재정의 수정. DeepTest에서 발견된 다양한 버그: miheapreallocaligned의 오프셋 수정, mi(w)dupenvs 버퍼 크기 수정, 크기 옵션의 잠재적 오버플로우 수정, mireallocarr(ay)의 오류 코드 수정.v3.2.8 (rc3): macOS에서 스레드 재초기화 문제 수정. 이전 GCC 버전에서 SIMD 코드 생성 버그 수정. Windows TLS 슬롯 제한을 64에서 1088로 확장. 커밋 통계를 더 정확하게 보고. 아레나에서 자유 페이지 검색 문제 수정.v1.9.7, v2.2.7, v3.2.7 (rc2): OS 할당된 블록의 0 초기화 수정. v3의 다양한 버그 및 성능 수정. Debian 32비트 컴파일 수정.v1.9.6, v2.2.6, v3.2.6 (rc1): 중요한 버그 수정. v3에 대한 많은 개선 사항: 모든 스레드에서 힙에 할당할 수 있는 진정한 일급 힙, 힙별 통계 추적. MIMALLOCALLOWTHP 옵션 추가. 기본적으로 Android를 제외하고 활성화됩니다. v3에서 THP가 감지되면 mimalloc은 잠재적인 THP 거대 페이지를 분할하지 않도록 MIMALLOCMINIMALPURGESIZE를 2MiB로 설정합니다. v3는 Windows에서 더 빠른 TLS 액세스를 사용하며 micalloc 및 정렬된 할당의 성능이 향상되었습니다. 이전 v3의 드문 경쟁 조건 수정, 디버그 통계의 잠재적 버퍼 오버플로우 수정, 할당 및 해제 시 할당된 크기 반환 API 추가.v3.1.5: 메모리가 항상 올바르게 커밋되지 않았던 버그 수정 릴리스(이슈 #1098).v1.9.4, v2.2.4, v3.1.4 (베타): 몇 가지 중요한 버그 수정, OS 메모리가 항상 완전히 해제되지 않았던 경우 포함. v3 성능 개선, XBox 빌드, Android 빌드 수정, 이전 macOS 버전에 대한 interpose 지원, macOS에서 MADVFREEREUSABLE 사용, 항상 커밋 성공 확인, Windows 고정 TLS 오프셋에 대한 더 나은 지원 등.v1.9.3, v2.2.3, v3.0.3 (베타): 다양한 작은 버그 및 빌드 수정: arm32 pre v7 빌드 수정, mingw 빌드 수정, 런타임 통계 가져오기, 통계 커밋 수 개선, BMI1이 없는 x64 시스템에서 실행 수정.v1.9.2, v2.2.2, v3.0.2-beta: 다양한 작은 버그 및 빌드 수정. mioptionsprint, miarenasprint, 실험적인 mistatget 및 mistatgetjson 추가. mithreadsetinthreadpool 및 miheapsetnumaaffinity 추가(v3만). vcpkg 포트 파일 추가. mimalloc-redirect를 v1.3.2로 업그레이드. MIOPT_ARCH는 이제 기본적으로 꺼져 있지만 빠른 원자 연산을 위해 arm64에서 여전히 armv8.1-a를 가정합니다. QNX 지원 추가.v1.8.9, v2.1.9, v3.0.1-alpha: 중간 릴리스. Windows arm64 지원. 객체 뒤에 OS 가드 페이지를 배치하여 버퍼 오버플로우를 즉시 포착할 수 있는 새로운 guarded 빌드. 많은 작은 수정: Windows arm64, cygwin, riscV, dragonfly 빌드; 스레드 로컬 소멸자(Rust/C++)를 고려한 Windows 정적 라이브러리 초기화 수정; macOS 태그 변경; macOS TLS 슬롯 수정; 통계 개선; Windows에서 일관된 mimalloc.dll (mimalloc-override.dll 대신); Win11 H2에서 mimalloc-redirect 수정; 카나리에 0바이트 추가; CPython 수정 업스트림;.bss 크기 감소; 성능 향상을 위해 Windows에서 고정 TLS 슬롯 허용.특별 감사:
mimalloc에서 복잡한 버그를 찾은 Jason Gibson (@jasongibson).[genMC]: https://plv.mpi-sws.org/genmc/
mimalloc은 다양한 대규모 저지연 서비스에서 사용됩니다.