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 tumpukan 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 heap menyediakan lebih banyak fitur dan kontrol daripada fungsi global dan lokal. Aplikasi baru harus menggunakan fungsi heap 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 Fungsi Manajemen Memori.

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 membutuhkan 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. Ketika 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 di-movable, gunakan fungsi GlobalLock dan LocalLock .

Ukuran aktual memori yang dialokasikan bisa lebih besar dari ukuran yang diminta. Untuk menentukan jumlah byte aktual yang dialokasikan, gunakan fungsi GlobalSize atau LocalSize . Jika jumlah yang dialokasikan lebih besar dari jumlah yang diminta, proses dapat menggunakan seluruh jumlah.

Fungsi GlobalReAlloc dan LocalReAlloc mengubah ukuran atau atribut objek memori yang dialokasikan oleh GlobalAlloc dan LocalAlloc. Ukurannya bisa bertambah atau berkurang.

Fungsi GlobalFree dan LocalFree merilis memori yang dialokasikan oleh GlobalAlloc, LocalAlloc, GlobalReAlloc, atau LocalReAlloc. Untuk membuang objek memori yang ditentukan tanpa membatalkan handel, gunakan fungsi GlobalDiscard atau LocalDiscard . 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 fungsi GlobalFlags 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 penunjuk tertentu, gunakan fungsi GlobalHandle atau LocalHandle .

Membandingkan Metode Alokasi Memori