Perbezaan antara mmap dan malloc

mmap vs malloc

Terdapat ingatan dinamik di C dan ini menunjukkan peruntukan memori dalam bahasa pengaturcaraan C melalui satu set fungsi yang ada dalam perpustakaan standard C. Salah satunya ialah malloc, yang merujuk kepada peruntukan memori. Dalam sistem UNIX terdapat mmap, yang merujuk kepada sistem dipetakan memori yang datang dengan I / O uniknya sendiri. Kedua-dua (mmap dan malloc) pada nilai muka akan melaksanakan fungsi yang sama tetapi pengawasan lanjut menunjukkan beberapa perbezaan. Perbezaan ini, yang timbul daripada fungsi, digariskan di bawah.

Perbezaan

Mula-mula, adalah penting untuk menentukan sama ada terdapat sebarang bukti yang menunjukkan bahawa terdapat kekurangan memori yang tersedia. Ini dilakukan melalui ukuran prestasi program terhadap pengurusan memori .

Antara muka peruntukan memori utama adalah malloc. Ini adalah yang terbesar di perpustakaan C. Sebahagian daripada kod pengurusan yang terkandung di dalamnya adalah mmap. Apabila malloc sedang berjalan, ia mengumpulkan semua kemudahan sistem yang ada. Kemudahan sistem tambahan boleh digerakkan melalui kernel, yang merupakan salah satu strategi pengurusan memori yang digunakan oleh sistem untuk memastikan terdapat peruntukan memori yang memuaskan. Proses ini tidak mudah, namun, dan telah dibuat untuk menjadi rumit untuk satu-satunya alasan untuk mencegah orang daripada membuat program mudah yang boleh mengganggu peruntukan memori dan dengan itu mewujudkan prestasi yang lemah.

'mmap' sebaliknya adalah panggilan sistem yang mengambil alih dan meminta kernel untuk mencari wilayah yang tidak digunakan dan bersebelahan dalam alamat aplikasi yang cukup besar untuk membolehkan pemetaan beberapa halaman ingatan. Terdapat juga struktur pengurusan memori maya yang berkuat kuasa tidak boleh menyebabkan segfault.

Malloc umumnya berfungsi dalam kebanyakan proses pengurusan memori. Sekiranya program ini memerlukan memori tambahan, ini dipinjam dari OS. Mmap sebaliknya menggunakan suis konteks yang menukar menjadi tanah kernel.

Malloc paling sesuai untuk mengagihkan memori dalam mana-mana aplikasi yang berjalan pada sistem berbanding dengan penggunaan mmap. Ini adalah apa yang diperlukan untuk berlaku secara lalai, selain daripada kes-kes khas apabila ia dibenarkan.

Mmap boleh digunakan untuk mempercepatkan tindak balas yang diberikan oleh aplikasi. Walau bagaimanapun, ini tidak digalakkan kerana ia akhirnya mengorbankan beberapa bait ke halaman agar aplikasi berjalan lancar. Walaupun kandungan data mungkin kelihatan kecil pada mulanya, mengekstrapulasi apabila banyak aplikasi yang ingin dijalankan mungkin berkuat kuasa perlahan sistem lebih jauh.

Setelah mengukur prestasi dan penggunaan sumber, penilaian menyeluruh penggunaan data oleh semua aplikasi yang berjalan pada sistem perlu dilakukan. Jika jangka hayat aplikasi berjalan boleh ditunjukkan, ia boleh menjadi lebih baik.

Penggunaan mmap untuk mengagihkan memori datang dengan kelemahan bahawa peruntukan dan deallocation data dalam ketulan adalah mahal. Ini kerana data berpecah kepada pelbagai bidang, dan juga menafikan nama pengguna daripada membuat panggilan sistem.

Mmap berfaedah berbanding malloc kerana memori yang digunakan oleh mmap segera dikembalikan ke OS. Memori yang digunakan oleh malloc tidak akan dikembalikan kecuali terdapat pemecahan segmen data. Memori ini disimpan secara khusus untuk digunakan semula.

Ringkasan

'malloc' bermaksud titik peruntukan memori utama

Sistem mmap memanggil dan meminta kernel untuk mencari kawasan yang tidak digunakan dalam alamat aplikasi yang boleh menampung pemetaan beberapa halaman ingatan

Mmap tidak disyorkan untuk mengagihkan memori kerana memisahkan memori yang ada dan tidak boleh membuat panggilan sistem

Kelebihan mmap berbanding malloc adalah adanya memori, berbanding dengan memori malloc, yang digunakan semula.