GNU/Linux >> Belajar Linux >  >> Linux

Apakah malloc/free adalah syscall atau library routine yang disediakan oleh libc?

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.)


Linux
  1. Apa yang Terjadi Pada Ruang Kosong?

  2. Ulasan Nagios XI (Gratis Nagios core Vs Nagios XI)

  3. gratis:perintah tidak ditemukan

  1. Di mana tajuk pustaka standar C++

  2. Apa itu file .so.2?

  3. Force free() untuk mengembalikan memori malloc kembali ke OS

  1. Cara memeriksa versi perpustakaan libc di Debian Linux

  2. Apa yang dikembalikan malloc(0)?

  3. Tidak dapat memanggil fungsi pustaka standar C pada Linux 64-bit dari kode rakitan (yasm).