2012-11-04 70 views
1

我想在使用mmap()的進程之間共享內存。可以將mmap()應用於常規文件或POSIX共享內存文件(shm_open)上。但有什麼區別?不同之處不在於磁盤是否被訪問:mmap()將普通文件和mmap()加入POSIX共享內存文件有什麼區別?

  • 經常和最近訪問的常規文件生活在文件系統緩存/緩衝區,所以它們的內容已經在內存中。
  • 即使在使用mmap()和shm_open()時,當系統處於高內存壓力下時,該內存區域可能會被換出。

回答

0

一個區別是,雖然共享內存可能會被寫入到磁盤,它永遠不會被寫入到磁盤永久。如果您創建了一個普通文件,那麼它在重新啓動後仍然存在。如果你創建一個共享內存對象,它不會。在這方面它表現得像一個臨時文件。

另一個區別是「It is unspecified whether the name appears in the file system and is visible to other functions that take pathnames as arguments」。因此,雖然共享內存對象具有類似文件的路徑,但實際上並不需要出現在文件系統中。

真的,這兩個差異都是關於從文件系統中去耦的。文件和共享內存對象都是可以讀寫的字節,但文件不同之處在於它們在文件系統中保存。

+0

啊對,我完全忘記了堅持跨越引導的事情。 – Hongli