Di Windows, di versi terbaru MSVC, malloc (dan C++ new
, karena diimplementasikan menggunakan dasar yang sama untuk bagian alokasi memori sebenarnya dari new
) memanggil HeapAlloc()
. Di versi lain, seperti g++ mingw, runtime C adalah versi lama, yang tidak memanggil langsung ke HeapAlloc
, tetapi pada dasarnya, tetap ke HeapAlloc
- untuk menemukan sesuatu yang berbeda, kita perlu kembali ke Windows pre-95, yang memiliki GlobalAlloc
dan LocalAlloc
set fungsi - tapi saya tidak berpikir orang menggunakan kompiler 16-bit akhir-akhir ini - setidaknya tidak untuk pemrograman Windows.
Di Linux, jika Anda menggunakan glibc
, tergantung pada ukuran alokasi apakah itu memanggil sbrk
atau mmap
- mmap
(dengan MAP_ANONYMOUS
di bendera) digunakan untuk alokasi yang lebih besar (melebihi ambang batas, yang menurut saya adalah 2MB dalam implementasi tipikal)
malloc() dan teman-teman dianggap sebagai bagian dari sistem runtime yang disertakan dengan kompiler. Jadi setiap kompiler dapat dan memang menggunakan panggilan OS yang berbeda untuk mengimplementasikan malloc.
Seperti yang dikatakan orang lain, di Linux opsinya adalah sbrk() dan mmap().
Di Windows opsinya adalah HeapAlloc() dan VirtualAlloc().
Pertanyaan saya adalah- bagaimana malloc diimplementasikan dalam sistem Operasi berikut?
Di Linux ada dua malloc
yang terkenal implementasi:
dlmalloc (malloc-nya Doug Lea)
ptmalloc
Di Linux libc seperti glibc, eglibc atau newlib mengimplementasikan ptmalloc atau varian dari ptmalloc.
apa fungsi khusus OS yang disebut/implementasi malloc()?
Pada sistem Unix dan Linux sbrk
dan mmap
panggilan sistem digunakan. Lihat man 2 sbrk
dan man 2 mmap
untuk informasi lebih lanjut.
Baiklah, saya tidak yakin tentang Linux, tetapi jika menyangkut windows...
Memori dapat dialokasikan di dua tempat yang dikategorikan.
1) Tumpukan (Tumpukan Proses, Tumpukan yang Dibuat Khusus) lihat -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366711(v=vs.85).aspxmenggunakan fungsi seperti HeapAlloc &HeapFree. LocalAlloc dan LocalFree dapat digunakan sebagai 'pintasan' ke HeapAlloc saat Anda ingin mengalokasikan di heap proses default.
2) Memori Virtual (biasanya hanya khusus proses karena pembatasan akses dalam memori virtual global untuk keamanan), menggunakan VirtualAlloc, VirtualFree. lihat -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366916(v=vs.85).aspx
Sepengetahuan saya, malloc akan menggunakan fungsi alokasi heap di windows.
Saya harap ini membantu.