Fungsi LocalAlloc (winbase.h)
Mengalokasikan jumlah byte yang ditentukan dari tumpukan.
Sintaks
DECLSPEC_ALLOCATOR HLOCAL LocalAlloc(
[in] UINT uFlags,
[in] SIZE_T uBytes
);
Parameter
[in] uFlags
Atribut alokasi memori. Defaultnya adalah nilai LMEM_FIXED . Parameter ini bisa menjadi satu atau beberapa nilai berikut, kecuali untuk kombinasi yang tidak kompatibel yang secara khusus dicatat.
Nilai | Makna |
---|---|
|
Menggabungkan LMEM_MOVEABLE dan LMEM_ZEROINIT. |
|
Mengalokasikan memori tetap. Nilai yang dikembalikan adalah penunjuk ke objek memori. |
|
Mengalokasikan memori yang dapat di-movable. Blok memori tidak pernah dipindahkan dalam memori fisik, tetapi dapat dipindahkan dalam tumpukan default.
Nilai yang dikembalikan adalah handel ke objek memori. Untuk menerjemahkan handel ke penunjuk, gunakan fungsi LocalLock . Nilai ini tidak dapat digabungkan dengan LMEM_FIXED. |
|
Menginisialisasi konten memori ke nol. |
|
Menggabungkan LMEM_FIXED dan LMEM_ZEROINIT. |
|
Sama seperti LMEM_MOVEABLE. |
|
Sama seperti LMEM_FIXED. |
Nilai berikut kedaluarsa, tetapi disediakan untuk kompatibilitas dengan Windows 16-bit. Mereka diabaikan.
- LMEM_DISCARDABLE
- LMEM_NOCOMPACT
- LMEM_NODISCARD
[in] uBytes
Jumlah byte yang akan dialokasikan. Jika parameter ini nol dan parameter uFlags menentukan LMEM_MOVEABLE, fungsi mengembalikan handel ke objek memori yang ditandai sebagai dibuang.
Nilai kembali
Jika fungsi berhasil, nilai yang dikembalikan adalah handel ke objek memori yang baru dialokasikan.
Jika fungsi gagal, nilai yang dikembalikan adalah NULL. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Manajemen memori Windows tidak menyediakan timbunan lokal dan timbunan global yang terpisah. Oleh karena itu, fungsi LocalAlloc dan GlobalAlloc pada dasarnya sama.
Bendera memori bergerak LHND, LMEM_MOVABLE, dan NONZEROLHND menambahkan overhead yang tidak perlu dan memerlukan penguncian untuk digunakan dengan aman. Mereka harus dihindari kecuali dokumentasi secara khusus menyatakan bahwa mereka harus digunakan.
Aplikasi baru harus menggunakan fungsi heap kecuali dokumentasi secara khusus menyatakan bahwa fungsi lokal harus digunakan. Misalnya, beberapa fungsi Windows mengalokasikan memori yang harus dibebaskan dengan LocalFree.
Jika tumpukan tidak berisi ruang kosong yang cukup untuk memenuhi permintaan, LocalAlloc mengembalikan NULL. Karena NULL digunakan untuk menunjukkan kesalahan, alamat virtual nol tidak pernah dialokasikan. Oleh karena itu, mudah untuk mendeteksi penggunaan pointer NULL .
Jika fungsi LocalAlloc berhasil, fungsi tersebut mengalokasikan setidaknya jumlah yang diminta. Jika jumlah yang dialokasikan lebih besar dari jumlah yang diminta, proses dapat menggunakan seluruh jumlah. Untuk menentukan jumlah byte aktual yang dialokasikan, gunakan fungsi LocalSize .
Untuk membebaskan memori, gunakan fungsi LocalFree . Tidak aman untuk membebaskan memori yang dialokasikan dengan LocalAlloc menggunakan GlobalFree.
Contoh
Kode berikut menunjukkan penggunaan sederhana LocalAlloc dan LocalFree.
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _cdecl _tmain()
{
LPTSTR pszBuf=NULL;
pszBuf = (LPTSTR)LocalAlloc(
LPTR,
MAX_PATH*sizeof(TCHAR));
// Handle error condition
if( pszBuf == NULL )
{
_tprintf(TEXT("LocalAlloc failed (%d)\n"), GetLastError());
return;
}
//see how much memory was allocated
_tprintf(TEXT("LocalAlloc allocated %d bytes\n"), LocalSize(pszBuf));
// Use the memory allocated
// Free the memory when finished with it
LocalFree(pszBuf);
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | winbase.h (termasuk Windows.h) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |