在mmap()的手冊頁:爲什麼文件中MMAP啓動時偏移()必須是多頁面大小的
它的原型是:
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
和說明:
The mmap() function asks to map 'length' bytes starting at offset 'offset'
from the file (or other object) specified by the file descriptor fd into
memory, preferably at address 'start'.
Sepcifically ,最後一個參數:
'offset' should be a multiple of the page size as returned by getpagesize(2).
從我的練習中,offset
必須是頁面大小的倍數,例如我的Linux上的4096,否則,mmap()將返回Invalid argument
,offset
用於文件偏移,爲什麼它必須是虛擬內存系統頁面大小的倍數?
謝謝,
「操作系統必須確保這個位置充滿文件的內容,但操作系統只能檢測您是否訪問內存頁面 - 而不是單個位置。」你能在這裏更簡單明瞭嗎?無法吸收。謝謝! –
@GauravMinocha操作系統只能檢測到整個頁面正在被讀取(在本例中爲4096字節),而不是單個字節地址(RAM中的每個單字節內存都可以被尋址)。因此,文件的整個頁面一次加載。 – jwbensley