GNU/Linux >> Belajar Linux >  >> Linux

Apa panggilan OS / sistem asli Windows dan Linux yang dibuat dari malloc ()?

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.


Linux
  1. Apa itu vdso dan vsyscall?

  2. Tentukan versi OS, Linux dan Windows dari Powershell

  3. Apa perbedaan antara file .txt Linux dan Windows (pengodean Unicode)

  1. Cara memeriksa Versi OS dan Linux

  2. Apa Perbedaan Utama Antara Bsd Dan Gnu/linux Userland?

  3. Apa perbedaan antara panggilan Perpustakaan dan panggilan Sistem di Linux?

  1. Apa VPS Terbaik:Windows atau Linux?

  2. Apa saja opsi pemasangan untuk meningkatkan kinerja sistem file ext4 di Linux?

  3. Dalam bahasa apa Windows, Mac OS X dan Linux ditulis?