Sangat sering, malloc dan free menggunakan layanan alokasi memori virtual tingkat rendah dan mengalokasikan beberapa halaman (atau bahkan megabita) sekaligus, menggunakan pemanggilan sistem seperti mmap dan munmap (dan mungkin sbrk). Seringkali malloc lebih suka menggunakan kembali sebelumnya free d ruang memori bila relevan. Kebanyakan malloc implementasi menggunakan berbagai strategi yang berbeda untuk alokasi "besar" dan "kecil", dll...
Perhatikan bahwa ruang alamat virtual dapat dibatasi, mis. dengan setrlimit(2). Gunakan pmap(1) dan proc(5) di Linux untuk mempelajari lebih lanjut tentang ruang alamat virtual dari beberapa proses (mis. /proc/self/maps untuk Anda sendiri atau /proc/1234/maps - juga pmap 1234 perintah - untuk proses pid 1234).
Anda dapat melihat kode sumber libc GNU Anda, melihat kode sumber pustaka standar C lainnya (seperti musl-libc), membaca tentang malloc implementasi, pilih yang lain atau terapkan sendiri, atau gunakan strace untuk mencari tahu secara eksperimental.
Baca halaman manual syscalls (yaitu syscalls(2)) dan file <asm/unistd.h> untuk daftar panggilan sistem.
malloc yang sangat cepat
Saya sangat yakin bahwa standar C sangat tidak jelas tentang malloc dan free . Saya cukup yakin bahwa fungsi-fungsi berikut menghormati huruf (tetapi bukan semangat) dari standar:
/* politically incorrect, but very probably standard conforming */
void *malloc (size_t sz) { if (sz>0) errno = ENOMEM; return NULL; }
void free(void*ptr) { }
Tentu saja Anda akan membuat kode calloc dan realloc sesuai.
GNU libc memberi Anda pengait untuk malloc Anda sendiri fungsi (dan Anda bahkan mungkin dapat menggunakan Pengumpul Sampah Boehm secara transparan melaluinya). Pengait ini dapat menjadi usang dan tidak standar.
Jika menggunakan libc GNU, lihat juga mallinfo(3) dan malloc_stat(3) dan fungsi terkait.
malloc dan free adalah fungsi pustaka C standar yang akan diimplementasikan oleh setiap implementasi C.
Standar C hanya mendefinisikan cara fungsi-fungsi ini berperilaku dan perilaku yang diharapkan darinya. Bagaimana mereka akan diterapkan di kiri untuk setiap implementasi.
Singkatnya mereka adalah detail implementasi dari implementasi yang Anda gunakan.
("Implementasi" terdiri dari kompiler, penaut, pustaka runtime, dan mungkin beberapa hal lainnya.)