Fungsi Timbunan

Setiap proses memiliki timbunan default yang disediakan oleh sistem. Aplikasi yang sering membuat alokasi dari timbunan dapat meningkatkan performa dengan menggunakan timbunan privat.

Tumpukan privat adalah blok dari satu atau beberapa halaman di ruang alamat proses panggilan. Setelah membuat tumpukan privat, prosesnya menggunakan fungsi seperti HeapAlloc dan HeapFree untuk mengelola memori dalam tumpukan tersebut.

Fungsi heap juga dapat digunakan untuk mengelola memori dalam timbunan default proses, menggunakan handel yang dikembalikan oleh fungsi GetProcessHeap . Aplikasi baru harus menggunakan fungsi heap alih-alih fungsi global dan lokal untuk tujuan ini.

Tidak ada perbedaan antara memori yang dialokasikan dari timbunan privat dan yang dialokasikan dengan menggunakan fungsi alokasi memori lainnya. Untuk daftar lengkap fungsi, lihat tabel di Fungsi Manajemen Memori.

Catatan

Utas harus memanggil fungsi heap hanya untuk timbunan default proses dan timbunan privat yang dibuat dan dikelola utas, menggunakan handel yang dikembalikan oleh fungsi GetProcessHeap atau HeapCreate .

 

Fungsi HeapCreate membuat objek heap privat tempat proses panggilan dapat mengalokasikan blok memori dengan menggunakan fungsi HeapAlloc . HeapCreate menentukan ukuran awal dan ukuran maksimum untuk heap. Ukuran awal menentukan jumlah halaman yang diterapkan, baca/tulis yang awalnya dialokasikan untuk tumpukan. Ukuran maksimum menentukan jumlah total halaman yang dipesan. Halaman-halaman ini membuat blok yang bersebelahan di ruang alamat virtual proses tempat tumpukan dapat tumbuh. Halaman tambahan secara otomatis diterapkan dari ruang yang dipesan ini jika permintaan oleh HeapAlloc melebihi ukuran halaman yang diterapkan saat ini, dengan asumsi bahwa penyimpanan fisik untuknya tersedia. Setelah halaman diterapkan, halaman tidak dinonaktifkan sampai proses dihentikan atau sampai timbunan dihancurkan dengan memanggil fungsi HeapDestroy .

Memori objek heap privat hanya dapat diakses oleh proses yang membuatnya. Jika pustaka tautan dinamis (DLL) membuat timbunan privat, pustaka tersebut melakukannya di ruang alamat proses yang disebut DLL. Ini hanya dapat diakses oleh proses itu.

Fungsi HeapAlloc mengalokasikan jumlah byte tertentu dari timbunan privat dan mengembalikan penunjuk ke blok yang dialokasikan. Penunjuk ini dapat digunakan dalam fungsi HeapFree, HeapReAlloc, HeapSize, dan HeapValidate .

Memori yang dialokasikan oleh HeapAlloc tidak dapat dipindahkan. Alamat yang dikembalikan oleh HeapAlloc valid sampai blok memori dibebaskan atau direalokasikan; blok memori tidak perlu dikunci.

Karena sistem tidak dapat memampatkan tumpukan privat, sistem dapat menjadi terfragmentasi. Aplikasi yang mengalokasikan memori dalam jumlah besar dalam berbagai ukuran alokasi dapat menggunakan tumpukan fragmentasi rendah untuk mengurangi fragmentasi timbunan.

Kemungkinan penggunaan untuk fungsi heap adalah membuat timbunan privat ketika proses dimulai, menentukan ukuran awal yang cukup untuk memenuhi persyaratan memori proses. Jika panggilan ke fungsi HeapCreate gagal, proses dapat mengakhiri atau memberi tahu pengguna tentang kekurangan memori; namun, jika berhasil, prosesnya dipastikan memiliki memori yang dibutuhkan.

Memori yang diminta oleh HeapCreate mungkin atau mungkin tidak berdampingan. Memori yang dialokasikan dalam tumpukan oleh HeapAlloc berdekatan. Anda tidak boleh menulis atau membaca dari memori dalam timbunan kecuali yang dialokasikan oleh HeapAlloc, anda juga tidak boleh mengasumsikan hubungan apa pun antara dua area memori yang dialokasikan oleh HeapAlloc.

Anda tidak boleh merujuk dengan cara apa pun ke memori yang telah dibebaskan oleh HeapFree. Setelah memori dikosongkan, informasi apa pun yang mungkin ada di dalamnya hilang selamanya. Jika Anda memerlukan informasi, jangan kosongkan memori yang berisi informasi. Panggilan fungsi yang mengembalikan informasi tentang memori (seperti HeapSize) mungkin tidak digunakan dengan memori yang dikosongkan, karena dapat mengembalikan data palsu.

Fungsi HeapDestroy menghancurkan objek heap privat. Ini menonaktifkan dan melepaskan semua halaman objek heap, dan membatalkan handel ke heap.

Membandingkan Metode Alokasi Memori