質問
って二週間文をご覧くださ、小さいながらも迫力のJava仮想マシン。
今はそうとしていることをどのようにメモリを実施し、と言っても過言ではない二つのCかの問題:
char *mem = (char*)mmap(0, args->max_heap, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANON, -1, 0);
-->は-1パラメータはファイル記述子をどういう意味でしょうか?してくれてありがとうございますaleadyの受人がなかった誤解され...).
heapbase = (char*)(((uintptr_t)mem+HEADER_SIZE+OBJECT_GRAIN-1&)~(OBJECT_GRAIN-1)) HEADER_SIZE;
-->う1&?ないからではの仕様---
おかげさ
Yann
解決
ご利用のファイル記述子にできるし、たいファイルを図に示しますこの場合には、作成匿名マップ(ないよファイルのファイル記述子になる。一部の実装を無視する fd
のための匿名のマップは、 必要と しのときは-1
第の質問は構文エラー(おそらく誰).であるべきようなもの:
heapbase = (char*)(((uintptr_t)mem+HEADER_SIZE+OBJECT_GRAIN-1)
&~(OBJECT_GRAIN-1)) - HEADER_SIZE;
その場合、 OBJECT_GRAIN
される力のかをわかりやすく伝えるための配置にその力があります。例えば、8、 ~(OBJECT_GRAIN-1)
う ~7
(~00...001112
, である ~11...110002
る場合ANDed値が行することによって生成された値の複数の8以下です。
このレコード店ディスクユニオンの転写エラーのどこかでないが時をダウンロードして、文をご覧くださから こちらの 見 src/alloc.c
, か:
void initialiseAlloc(InitArgs *args) {
char *mem = (char*)mmap(0, args->max_heap, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANON, -1, 0);
:
<< a couple of irrelevant lines >>
:
/* Align heapbase so that start of heap + HEADER_SIZE is object aligned */
heapbase = (char*)(((uintptr_t)mem+HEADER_SIZE+OBJECT_GRAIN-1)&
~(OBJECT_GRAIN-1))-HEADER_SIZE;
(バージョンのもの -
直前 HEADER_SIZE
, ば何かがポイント転写問題があります)。
他のヒント
最初の質問に答えて。
fdは、MAP_ANONYMOUSが設定されていない限り、有効なファイル記述子である必要があります。MAP_ANONYMOUSが設定されている場合、Linuxではfdは無視されます。ただし、一部の実装では、MAP_ANONYMOUS(またはMAP_ANON)が指定されている場合、fdを-1にする必要があり、ポータブルアプリケーションはこれを保証する必要があります。
MAP_ANONYMOUS
が使用されているため、-1になります。