Saya pikir pembebasan langsung adalah yang terbaik. Perilaku tidak terdefinisi adalah hal terburuk, jadi jika Anda memiliki akses sementara itu masih ditentukan dalam proses Anda, lakukanlah, ada banyak alasan bagus yang diberikan orang untuk itu.
Mengenai di mana, atau apakah, saya menemukan bahwa di W98, pertanyaan sebenarnya adalah 'kapan' (saya tidak melihat postingan yang menekankan hal ini). Program template kecil (untuk input MIDI SysEx, menggunakan berbagai ruang malloc'd) akan membebaskan memori di bit WM_DESTROY dari WndProc, tetapi ketika saya memindahkannya ke program yang lebih besar, program tersebut macet saat keluar. Saya berasumsi ini berarti saya mencoba membebaskan apa yang telah dibebaskan OS selama pembersihan yang lebih besar. Jika saya melakukannya di WM_CLOSE, lalu memanggil DestroyWindow (), semuanya bekerja dengan baik, keluar bersih instan.
Meskipun ini tidak persis sama dengan buffer MIDI, ada kesamaan yaitu yang terbaik adalah menjaga proses tetap utuh, bersihkan sepenuhnya, lalu keluar. Dengan potongan memori sederhana ini sangat cepat. Saya menemukan bahwa banyak buffer kecil bekerja lebih cepat dalam pengoperasian dan pembersihan dibandingkan buffer besar yang lebih sedikit.
Pengecualian mungkin ada, seperti yang dikatakan seseorang ketika menghindari menarik potongan memori besar kembali dari file swap pada disk, tetapi bahkan itu dapat diminimalkan dengan menyimpan lebih banyak, dan lebih kecil, ruang yang dialokasikan.