Saya mengonversi kode C dan C++ yang dibuat dengan Visual Studio 2026 ke Xcode.. dan yang mengejutkan, char16_t dan char32_t ternyata tidak mendukung std::format dari C++20.. Astaga..
Ternyata std::format untuk char16_t dan char32_t adalah dukungan ekstensi khusus Visual Studio 2026.. ㅠㅠ
Saya menghapus semua kode terkait, minta bantuan AI untuk mengonversinya, lalu berhasil menjalankan aplikasi konsol Windows di terminal macOS.
Saya mencoba menerapkan custom memory allocator sesuai spesifikasi PMR dari C++20 ke berbagai kontainer seperti vector dan list, lalu menjalankan benchmark performa dibandingkan dengan malloc dari C.. hasilnya hampir sama atau sedikit lebih lambat.. secara keseluruhan performanya kurang lebih setara.
Mulai dari C++20, tersedia dukungan untuk dua jenis memory pool: yang menggunakan lock untuk sinkronisasi thread, dan yang tidak menggunakan lock. Memory pool dengan lock memang agak lambat-_-;
Karena diimplementasikan dengan mutex, prosesnya harus masuk ke kernel lalu kembali lagi.. Saya mencoba mengimplementasikannya dengan spinlock dan memang sedikit lebih cepat, tapi spinlock pun kadang bisa lebih lambat jika tidak beruntung, jadi hasilnya masih ambigu.
Meski begitu, ada keuntungan bisa menggunakan memory pool secara standar tanpa perlu menginstal Boost, dan dengan menambahkan kata kunci final pada custom allocator serta menjalankan kode tanpa melalui vtable sebisa mungkin.. tampaknya sudah cukup cepat untuk digunakan pada game rendering engine atau game server.
Senang karena berjalan lancar di Mac.
Malloc sudah dioptimalkan sebaik mungkin sehingga kecepatannya memang luar biasa, tapi jika program berjalan dalam waktu lama dan terus melakukan alokasi dinamis, ada kemungkinan terjadi fragmentasi heap pada prosesor yang menyebabkan penurunan performa, cache miss, dan berbagai hal tidak menyenangkan lainnya bahkan pada OS modern. Dengan selisih performa sekecil itu, menggunakan memory pool PMR dari C++20 bukan pilihan yang buruk.
Untuk Mac
Untuk Windows
Windows menggunakan Ryzen 5950X..
Mac menggunakan M5 Pro.
Pada dasarnya angka-angka tersebut sudah ditangani oleh caching internal malloc, jadi benchmark ini tidak terlalu bermakna..
Anggap saja sebagai gambaran kasar perbedaan antara PMR dan malloc.
Ini bukan malloc dan free yang dilakukan sekaligus secara bersamaan, melainkan malloc semua terlebih dahulu baru kemudian free..
Jadi ini bukan sekadar memasukkan dan mengeluarkan secara sembarangan. Karena ini adalah alokasi linear, performa nyata saat program berjalan
dengan alokasi ukuran acak pada waktu acak tidaklah tercermin sepenuhnya, tapi silakan gunakan sebagai referensi saja.