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;
}