GNU/Linux >> Belajar Linux >  >> Linux

Seberapa portabel mmap?

Prinsip file yang dipetakan memori cukup portabel, tetapi Anda tidak memiliki mmap() di Windows (tetapi hal-hal seperti MapViewOfFile() ada). Anda dapat mengintip kode python mmap modules c untuk melihat bagaimana mereka melakukannya untuk berbagai platform.


Menggunakan mmap untuk membaca file tidak portabel jika Anda mengandalkan pemetaan bit besar dari file besar ke dalam ruang alamat Anda - sistem 32-bit dapat dengan mudah tidak memiliki satu ruang besar yang dapat digunakan - katakanlah 1G - ruang alamat yang tersedia sehingga mmap akan cukup gagal sering kali untuk pemetaan 1G.


mmap() function adalah panggilan POSIX. Ini berfungsi dengan baik di MacOS X (dan Linux, dan HP-UX, dan AIX, dan Solaris).

Area masalahnya adalah Windows. Saya tidak yakin apakah ada _mmap() panggil sub-sistem 'kompatibilitas' POSIX. Kemungkinan ada di sana — tetapi akan memiliki nama dengan garis bawah di depan karena Microsoft memiliki pandangan alternatif tentang ruang nama dan mempertimbangkan mmap() untuk mengganggu ruang nama pengguna, bahkan jika Anda meminta fungsionalitas POSIX. Anda dapat menemukan definisi antarmuka Windows alternatif MapViewOfFile() dan diskusi tentang kinerja di pertanyaan SO lainnya (mmap() vs blok membaca).

Jika Anda mencoba memetakan file besar pada sistem 32-bit, Anda mungkin menemukan tidak ada cukup ruang bersebelahan untuk mengalokasikan seluruh file dalam memori, sehingga pemetaan memori akan gagal. Jangan menganggap itu akan berhasil; putuskan apa strategi fallback Anda jika gagal.


Saya menganggap io yang dipetakan memori pada UNIX tidak dapat digunakan untuk aplikasi interaktif, karena dapat mengakibatkan SIGSEGV/SIGBUS (jika file telah terpotong sementara oleh beberapa proses lain). Mengabaikan "solusi" yang sakit seperti setjmp/longjmptidak ada apa-apa seseorang dapat melakukan selain menghentikan proses setelah mendapatkan SIGSEGV/SIGBUS. Fitur G++ baru untuk mengubah sinyal tersebut menjadi pengecualian tampaknya ditujukan terutama untuk OS apel, karena deskripsi menyatakan, bahwa seseorang memerlukan dukungan runtime untuk fitur G++ ini dan tidak ada informasi yang dapat ditemukan tentang fitur G++ ini di mana saja. Kita mungkin harus menunggu beberapa tahun, hingga penanganan pengecualian terstruktur seperti itu dapat ditemukan di windows sejak lebih dari 20 tahun masuk ke UNIX.


Linux
  1. Cara Menambahkan Ruang Swap di Debian 11

  2. Bagaimana cara menambahkan ruang swap di linux

  3. Cara:Ruang Disk Gratis Mengurangi Blok Cadangan

  1. Cara menggunakan perintah sed Linux

  2. Cara mengisi hard drive di Linux

  3. bagaimana ukuran halaman ditentukan dalam ruang alamat virtual?

  1. Cara Membuat Atau Menambah Ruang Swap Di Linux

  2. Bagaimana Cara Mendiagnosis Dan Memperbaiki Ruang Drive yang Hilang?

  3. Cara Menambahkan Ruang Swap di Ubuntu 22.04