mimalloc <vs> malloc bawaan

111.87.***.***
12

Saya telah menguji pmr C++20 selama beberapa hari dalam lingkungan single-thread dan multi-thread

Manajemen memori berfungsi dengan baik dan performanya lumayan, jadi saya berpikir untuk terus menggunakannya..

Namun, mengingat karakteristik game engine yang harus memanfaatkan performa hardware sampai habis

Saya merasa bahwa performa alokasi memori yang "lumayan" saja tidak cukup

Jadi saya memutuskan untuk menggantinya.

Saya berpikir untuk membuatnya sendiri. Dahulu saya pernah membuat allocator menggunakan low-level API yang disediakan OS

Saya bisa membuat allocator dengan fitur yang sesuai,

Tapi itu seperti memelihara sapi hanya untuk membuat patty burger..

Jadi saya memutuskan untuk tidak pergi sejauh itu.

C++ menyediakan new yang pada dasarnya adalah alokasi memori seperti malloc + pemanggilan inisialisasi konstruktor

Jadi saya memutuskan untuk hanya mengganti malloc.

Yang paling terkenal adalah jemalloc dari Facebook dan tcmalloc dari Google.

Keduanya adalah allocator terkenal dengan performa bagus dan optimasi yang matang.

Namun keduanya agak berat. Banyak variabel thread-local dan cache yang berserakan..

Kodenya tidak terlalu kompleks, tapi saya tidak begitu suka yang berat. ㅎㅎ

Kemudian saya teringat mimalloc yang dilepaskan sebagai open-source oleh Microsoft..

Saya mengunduhnya dan mengujinya.

Wow, memang ringan, cepat, dan bagus.

Katanya mimalloc paling populer akhir-akhir ini, dan sepertinya memang benar.

Saya membangun untuk Windows dan MacOS, lalu langsung mengintegrasikan dan mengujinya.

Untuk saat ini saya hanya menguji di Windows.

sys_alloc adalah mimalloc.

Performanya sangat bagus. Dalam mode debug ada berbagai kode pengecekan jadi lebih lambat..

Ketika membuat Release build untuk performa sebenarnya, itu menunjukkan performa yang luar biasa.

Menunjukkan performa yang sama dengan allocator temp yang digunakan untuk mencapai alokasi dinamis nol saat menggunakan STL.

Sepertinya secara internal itu melakukan peran cache memori dengan sangat sempurna.

Mudah dikompilasi, ringan, cepat, dan melihat berbagai performa benchmark, bahkan dalam throughput data besar

Tetap menunjukkan performa yang sangat baik, jadi saya memutuskan untuk menggunakan mimalloc!

Setelah menerapkan mimalloc dan mengimplementasikan new/delete, menggunakan std::source_location C++20

Saya juga membuat struktur pelacakan memori yang mencatat nama kode sumber, nomor baris, dan nama fungsi dari pemanggilan alokasi.

Sekarang allocator harus disatukan dengan ini baik saat membuat server maupun engine rendering.

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
8.34 -0.01

2026.07.10 KEB 하나은행 고시회차 1177회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!