定義
該演算法分為標記和整理兩個階段,標記階段會遍歷並標記活動物件,整理階段通過數次搜尋堆來重新裝填活動物件,它們聚集到了堆的一端。
lisp2演算法
forwarding指標表示活動物件的目標位址
過程概要
初始狀態
標記結束後
整理結束後
整理階段偽**
compaction_phase() {
// 設定forwarding指標
set_forwarding_ptr();
// 更新指正
adjust_ptr();
// 移動物件
move_obj();
// 第一次遍歷堆
// $head_start 堆起始位址
// $head_end 堆結束位址
set_forwarding_ptr() {
// 定義搜尋堆的指標和指向目標位址的指標
scan = new_address = $head_start;
// 遍歷堆,進行設定
while (scan < $head_end) {
// 若是活動物件,則設定forwarding指標
if (scan.mark == true) {
scan.forwarding = new_address;
new_address += scan.size;
scan += scan.size;
// 第二次遍歷堆
adjust_ptr() {
// 更新根物件forwarding指標
for (r : $roots) {
*r = (*r).forwarding;
scan = $head_start;
while (scan < $head_end) {
// 更新子物件forwarding指標
if(scan.mark == true) {
for(child : children(scan)) {
*child = (*child).forwarding;
scan += scan.size;
// 第三次遍歷堆
move_obj() {
scan = $free = $heap_start;
while(scan < $heap_end) {
if(scan.mark == true) {
// 將找到的物件移動到 forwarding 指標的引用目標處
new_address = scan.forwarding;
copy_data(new_address, scan, scan.size);
new_address.forwarding = null;
new_address.mark = false;
$free += new_address.size;
scan += scan.size;
LISP 圓孔標記 lisp使用說明
字串結合功能函式 getstring 提示 要求鍵入乙個字串 rtos 實數 將實數轉換成字串 範例說明 1 strcat abc 123 lisp 傳回 abc123lisp.字串結合功能函式 getstring 提示 要求鍵入乙個字串 rtos 實數 將實數轉換成字串 範例說明 1 strcat...
心形函式 封心
這個是 html5實驗室 canvas世界 中的乙個例子,最大的收穫當然是心形函式 x 2 y 2 1 x 2 y 3 0。有了前面幾個動畫做鋪墊,這個還是比較容易就完成了,沒有遇到什麼奇特的問題。不過也因為比較輕鬆,的組織不是很認真,也不想去改了。值得一提的是這個動畫很容易另行發揮,我在除錯的過程...
animation心形 表白
animation心形線 表白 去除預設外邊距 內邊距 body heart3d display heart3d class rib heart3d class 0 heart3d class 1 heart3d class 2 heart3d class 3 heart3d class 4 hea...