最終更新:ID:55w90ThOAA 2009年04月17日(金) 20:38:05履歴
int caml_page_table_initialize(mlsize_t bytesize)
{ int i; for (i = 0; i < Pagetable1_size; i++)
caml_page_table[i] = caml_page_table_empty;
return 0; }
int caml_page_table_initialize(mlsize_t bytesize) { uintnat pagesize = Page(bytesize);
必要なページテーブルの配列の大きさ。
本来、Pageマクロは、メモリアドレスのページ番号を得るためのものだが、ここでは、メモリの大きさからページ数を求めるのに使用している。
caml_page_table.size = 1;
caml_page_table.sizeは、下のwhile文の中で変更される。
caml_page_table.shift = 8 * sizeof(uintnat);
64ビットの場合、この時点でのcaml_page_table.shiftは、64のはず。
/* Aim for initial load factor between 1/4 and 1/2 */
最初は、1/4から1/2までの負荷率を狙う。
while (caml_page_table.size < 2 * pagesize) { caml_page_table.size <<= 1; caml_page_table.shift -= 1; }
ページテーブルの配列の大きさが、総ページ数の2倍以上になるまで、大きさを増やす。
caml_page_table.mask = caml_page_table.size - 1; caml_page_table.occupancy = 0; caml_page_table.entries = calloc(caml_page_table.size, sizeof(uintnat)); if (caml_page_table.entries == NULL) return -1; else return 0; }
タグ
このページへのコメント
rRoiNl Thank you ever so for you post. Keep writing.