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.