Fungsi Global dan Lokal
Fungsi global dan lokal didukung untuk porting dari kode 16-bit, atau untuk mempertahankan kompatibilitas kode sumber dengan Windows 16-bit. Dimulai dengan Windows 32-bit, fungsi global dan lokal diimplementasikan sebagai fungsi pembungkus yang memanggil fungsi timbunan yang sesuai menggunakan handel ke tumpukan default proses. Oleh karena itu, fungsi global dan lokal memiliki overhead yang lebih besar daripada fungsi manajemen memori lainnya.
Fungsi timbunan menyediakan lebih banyak fitur dan kontrol daripada fungsi global dan lokal. Aplikasi baru harus menggunakan fungsi timbunan kecuali dokumentasi secara khusus menyatakan bahwa fungsi global atau lokal harus digunakan. Misalnya, beberapa fungsi Windows mengalokasikan memori yang harus dibebaskan dengan LocalFree, dan fungsi global masih digunakan dengan Dynamic Data Exchange (DDE), fungsi clipboard, dan objek data OLE. Untuk daftar lengkap fungsi global dan lokal, lihat tabel di Memory Management Functions.
Manajemen memori Windows tidak menyediakan timbunan lokal dan timbunan global terpisah, seperti yang dilakukan Windows 16-bit. Akibatnya, keluarga fungsi global dan lokal setara dan memilih di antara mereka adalah masalah preferensi pribadi. Perhatikan bahwa perubahan dari model memori tersegmentasi 16-bit ke model memori virtual 32-bit telah membuat beberapa fungsi global dan lokal terkait dan opsinya tidak perlu atau tidak berarti. Misalnya, tidak ada lagi pointer dekat dan jauh, karena alokasi lokal dan global mengembalikan alamat virtual 32-bit.
Objek memori yang dialokasikan oleh GlobalAlloc dan LocalAlloc berada di halaman privat dan berkomitmen dengan akses baca/tulis yang tidak dapat diakses oleh proses lain. Memori yang dialokasikan dengan menggunakan GlobalAlloc dengan GMEM_DDESHARE sebenarnya tidak dibagikan secara global seperti di Windows 16-bit. Nilai ini tidak berpengaruh dan hanya tersedia untuk kompatibilitas. Aplikasi yang memerlukan memori bersama untuk tujuan lain harus menggunakan objek pemetaan file. Beberapa proses dapat memetakan tampilan objek pemetaan file yang sama untuk menyediakan memori bersama bernama. Untuk informasi selengkapnya, lihat Pemetaan File.
Alokasi memori hanya dibatasi oleh memori fisik yang tersedia, termasuk penyimpanan dalam file halaman pada disk. Saat Anda mengalokasikan memori tetap, GlobalAlloc dan LocalAlloc mengembalikan pointer yang dapat segera digunakan proses panggilan untuk mengakses memori. Saat Anda mengalokasikan memori yang dapat dipindahkan, nilai yang dikembalikan adalah handel. Untuk mendapatkan penunjuk ke objek memori yang dapat bergerak, gunakan fungsiGlobalLock danLocalLock.
Ukuran aktual memori yang dialokasikan dapat lebih besar dari ukuran yang diminta. Untuk menentukan jumlah byte aktual yang dialokasikan, gunakan fungsiGlobalSize atau LocalSize. Jika jumlah yang dialokasikan lebih besar dari jumlah yang diminta, proses dapat menggunakan seluruh jumlah.
FungsiGlobalReAlloc danLocalReAlloc mengubah ukuran atau atribut objek memori yang dialokasikan olehGlobalAllocdan LocalAlloc. Ukurannya dapat meningkat atau berkurang.
Memori rilis fungsiGlobalFree danLocalFree yang dialokasikan oleh GlobalAlloc, LocalAlloc, GlobalReAlloc, atau LocalReAlloc. Untuk membuang objek memori yang ditentukan tanpa membatalkan handel, gunakan fungsiGlobalDiscard atauLocalDiscard. Handel dapat digunakan nanti oleh GlobalReAlloc atau LocalReAlloc untuk mengalokasikan blok memori baru yang terkait dengan handel yang sama.
Untuk mengembalikan informasi tentang objek memori tertentu, gunakan fungsiGlobalFlags atau LocalFlags. Informasi ini mencakup jumlah kunci objek dan menunjukkan apakah objek dapat dibuang atau telah dibuang. Untuk mengembalikan handel ke objek memori yang terkait dengan pointer tertentu, gunakan fungsi GlobalHandle atau LocalHandle.
Topik terkait