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.