Membandingkan Metode Alokasi Memori

Berikut ini adalah perbandingan singkat dari berbagai metode alokasi memori:

Meskipun fungsi GlobalAlloc, LocalAlloc, dan HeapAlloc pada akhirnya mengalokasikan memori dari tumpukan yang sama, masing-masing menyediakan serangkaian fungsionalitas yang sedikit berbeda. Misalnya, HeapAlloc dapat diinstruksikan untuk memunculkan pengecualian jika memori tidak dapat dialokasikan, kemampuan yang tidak tersedia dengan LocalAlloc. LocalAlloc mendukung alokasi handel yang memungkinkan memori yang mendasar dipindahkan oleh realokasi tanpa mengubah nilai handel, kemampuan yang tidak tersedia dengan HeapAlloc.

Dimulai dengan Windows 32-bit, GlobalAlloc dan LocalAlloc diimplementasikan sebagai fungsi pembungkus yang memanggil HeapAlloc menggunakan handel ke tumpukan default proses. Oleh karena itu, GlobalAlloc dan LocalAlloc memiliki overhead yang lebih besar daripada HeapAlloc.

Karena alokator timbunan yang berbeda menyediakan fungsionalitas yang khas dengan menggunakan mekanisme yang berbeda, Anda harus membebaskan memori dengan fungsi yang benar. Misalnya, memori yang dialokasikan dengan HeapAlloc harus dibebaskan dengan HeapFree dan bukan LocalFree atau GlobalFree. Memori yang dialokasikan dengan GlobalAlloc atau LocalAlloc harus dikueri, divalidasi, dan dirilis dengan fungsi global atau lokal yang sesuai.

Fungsi VirtualAlloc memungkinkan Anda menentukan opsi tambahan untuk alokasi memori. Namun, alokasinya menggunakan granularitas halaman, sehingga menggunakan VirtualAlloc dapat mengakibatkan penggunaan memori yang lebih tinggi.

Fungsi malloc memiliki kerugian karena bergantung pada run-time. Operator baru memiliki kerugian karena dependen pengkompilasi dan dependen bahasa.

Fungsi CoTaskMemAlloc memiliki keuntungan bekerja dengan baik di C, C++, atau Visual Basic. Ini juga satu-satunya cara untuk berbagi memori dalam aplikasi berbasis COM, karena MIDL menggunakan CoTaskMemAlloc dan CoTaskMemFree ke memori marshal.

Contoh

Fungsi Global dan Lokal

Fungsi Heap

Fungsi Memori Virtual