Bagikan melalui


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 sepertiHeapAllocdan HeapFree untuk mengelola memori dalam tumpukan tersebut.

Fungsi tumpukan juga dapat digunakan untuk mengelola memori dalam tumpukan default proses, menggunakan handel yang dikembalikan oleh fungsiGetProcessHeap. Aplikasi baru harus menggunakan fungsi timbunan 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 Memory Management Functions.

Nota

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

 

Fungsi HeapCreate membuat objek timbunan privat tempat proses panggilan dapat mengalokasikan blok memori dengan menggunakan fungsiHeapAlloc. HeapCreate menentukan ukuran awal dan ukuran maksimum untuk tumpukan. 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 tumpukan dihancurkan dengan memanggil fungsiHeapDestroy.

Memori objek timbunan privat hanya dapat diakses oleh proses yang membuatnya. Jika pustaka tautan dinamis (DLL) membuat timbunan privat, itu 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 pointer ke blok yang dialokasikan. Penunjuk ini dapat digunakan dalam HeapFree, HeapReAlloc, fungsiHeapSize , dan HeapValidate.

Memori yang dialokasikan olehHeapAlloctidak dapat dipindahkan. Alamat yang dikembalikan oleh HeapAlloc valid hingga blok memori dibebesarkan atau direalokasikan; blok memori tidak perlu dikunci.

Karena sistem tidak dapat memadamkan 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 tumpukan.

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

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 tumpukan 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 dibeberkan oleh HeapFree. Setelah memori dibebesarkan, 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 dibebaskan, karena dapat mengembalikan data palsu.

Fungsi HeapDestroy menghancurkan objek timbunan privat. Ini menon-fungsikan dan melepaskan semua halaman objek timbunan, dan membatalkan handel ke timbunan.

Membandingkan Metode Alokasi Memori