大家都沒問我心中的疑問實在是太困擾了
好在我姊很威猛 翻了一下她當年report就解決我的疑惑了zzz
我來簡單分享一下心得
寫完就不要理我啦 沒寫的就可以參考一下XD
不然就當是給不知道會不會有的未來修課的學弟妹們心得= =+
主要就是幾個詞的定義
slotCnt
這個最機車了 code原本裡面寫number of slots in use
但其實他的意思是 allocate的slots數量!!
所以slotCnt是可能包含有洞的slot的
slotCnt = #EMPTY_SLOT + #non-EMPTY_SLOT
總之就是你在做slot部分的linear search的時候的upper bound啦~
freeSpace v.s. available_space
freeSpace 指的是 整個data space空白的地方
基本上來說
data space包含data + slot[0]
所以在宣告data的時候才會是
data[MAX_SPACE - DPFIXED]
slot[1]
其實slot感覺起來應該要是個指標指向data末端
不過這樣寫是為了方便 + slot會變成常數指標
那所謂的freeSpace又是什麼呢
一開始的時候是 MAX_SPACE - DPFIXED + sizeof(slot) //slot[0]那格也要算喔>.^
之後加新的record會 - recordSize - sizeof(slot)
刪除record會 + recordSize + sizeof(slot)
也就是如果slot有洞 他是會把洞算在freespace裡的!!
available_space 指的則是 "剩下可以放新的record的空間"
所以自然 slot有洞的地方就不會算到了
available_space = freespace - sizeof(slot_t)*#non-Empty_slot.
Notice: 要注意的是 如果slot全部是滿的又會怎樣呢 (#Empty_slot = 0)
當下次要新增一個record的時候
available_space只有放record空間是不夠的
因為還必須要有空間放slot
所以這種情況下available_space其實是 = freespace - sizeof(slot_t)
以上大概是我寫這次作業的心得...
//我可以不用交report了嗎(大誤