19

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'.

具体的には、最後の引数について:

'offset' should be a multiple of the page size as returned by getpagesize(2).

私が実践したことから、ページ サイズの倍数でなければなりません。たとえば、offset私の Linux では 4096です。Invalid argumentoffset

ありがとう、

4

1 に答える 1

15

簡単な答えは、高速化することです。より複雑な答え: マップされたメモリ内の場所にあるメモリにアクセスするたびに、OS はこの場所がファイルの内容で満たされていることを確認する必要があります。しかし、OS が検出できるのはメモリ ページにアクセスしたかどうかだけであり、単一の場所ではありません。これが行うことは、ファイルとメモリ ページのオフセット間に単純な関係を作成することです。メモリ ページにアクセスするたびに、ファイルのその部分がロードされます。これらの計算を高速化するために、特定のオフセットから開始するように制限されています。

于 2014-02-20T06:01:52.637 に答える