對mem的初始化可以分為兩個部分,對低端內(nèi)存的初始化和對高端內(nèi)存的初始化,這兒先說對低端內(nèi)存的初始化.首先是一些簡寫:
define link(#)=mem[#].hh.rh
define info(#)=mem[#].hh.lh
defineempty_flag=max_halfword{用來對可變大小節(jié)點的link域進行初始化}
definenode_size=info{可變大小節(jié)點的大小}
definellink(#)=info(#+1){雙向循環(huán)鏈表的左指針}
definerlink(#)=link(#+1){雙向循環(huán)鏈表的右指針}
初始化過程首先將前一節(jié)的zero_glue至fil_neg_glue初始化,具體初始化的代碼比較簡單,這兒不再給出,具體可參考DEK的書或者等以后介紹了glue的數(shù)據(jù)結(jié)構(gòu)
后自然就明白了.
然后是初始化:
rover=lo_mem_stat_max+1;link(rover)=empty_flag;
node_size(rover)=1000;
llink(rover)=rover;rlink(rover)=rover;
lo_mem_max=rover+1000;
link(lo_mem_max)=null;info(lo_mem_max)=null;
avail=null; mem_end=mem_top;hi_mem_min=hi_mem_stat_usage;
可以看出:
(1) rover指向mem低端未使用的第一個字節(jié),開始時只有rover一個空列表,該空列表的大小是1000字
(2) lo_mem_max正好指向比rover大1000字的地方,并且已經(jīng)經(jīng)過了初始化.
(3) 沒有可用的單字空間(avail=null), 這一點我們在后面的函數(shù)get_avail中也可以看得出.
(4)hi_mem_min到mem_top是一些全局指針,沒有其他東西(hi_mem_min=hi_mem_stat_usage).
至于高端內(nèi)存的初始化需要用到許多常量,我們把它放到以后.