Kedua panggilan pada dasarnya setara pada Linux modern - Pendekatan pertama dapat digunakan untuk mengakses memori bersama POSIX dari bahasa seperti go (lihat https://github.com/fabiokung/shm/blob/master/shm_linux.go ) di mana memori bersama POSIX tidak tersedia secara asli - mungkin berbeda untuk OS/versi lain di mana panggilan pertama akan menyebabkan beberapa pembuatan file atau /dev/shm tidak tersedia dan/atau mungkin kinerja lebih lambat. Aturan penggabungan jalur mungkin juga berkembang dari versi ke versi librt
Pendekatan pertama disebut API file yang dipetakan memori (didukung di std libs)
2 disebut API memori bersama POSIX (membutuhkan librt alias libposix di Linux sebagai ketergantungan Ini secara internal membangun jalur dan panggilan terbuka)
Setelah membaca sumber shm_open
, bisa dibilang kedua metode tersebut hampir sama.
tautan:https://code.woboq.org/userspace/glibc/sysdeps/posix/shm_open.c.html
shm_open cukup tambahkan awalan shm_dir lalu panggil open
normal syscall, tidak ada yang istimewa.
Jika Anda membuka dan mmap() file biasa, data akan berakhir di file itu.
Jika Anda hanya perlu berbagi wilayah memori, tanpa perlu mempertahankan data, yang menyebabkan overhead I/O tambahan, gunakan shm_open().
Wilayah memori seperti itu juga akan memungkinkan Anda untuk menyimpan objek jenis lain seperti mutex atau semaphore, yang tidak dapat Anda simpan dalam file reguler mmap() pada sebagian besar sistem.