簡體   English   中英

mmap做什么?

[英]What does mmap do?

這行代碼有什么作用?

mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);

它請求n字節內存的私有可寫匿名映射。

  • 私有映射意味着它不與其他進程共享(例如,在fork() ,子進程和父進程將具有獨立的映射);
  • 匿名映射意味着它不受文件支持。

在這種情況下,它本質上是請求一個n字節的內存塊,所以大致相當於malloc(n) (盡管它必須用munmap()而不是free()釋放,並且它將是頁面對齊的)。 它還要求內存可寫但不要求它是可讀的,但是可寫和不可讀的內存通常不是底層硬件支持的組合。 當單獨請求PROT_WRITE時,POSIX允許實現提供也可以讀取和/或可執行的內存。

man mmap會幫助你。

它在進程的虛擬地址空間中創建內存映射。 它正在創建一個匿名映射,這就像使用malloc分配n個字節的內存一樣。

參數是:

  • NULL - 內核將為映射選擇一個地址
  • n - 映射的長度(以字節為單位)
  • PROT_WRITE - 可以寫入頁面
  • MAP_ANON | MAP_PRIVATE MAP_ANON | MAP_PRIVATE - 映射不由文件支持,寫入映射的更新對進程是私有的
  • -1 - 文件描述符; 未使用,因為映射不受文件支持
  • 0 - 文件中開始映射的偏移量 - 再次,未使用,因為映射不受文件支持

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM