青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 119  文章 - 290  trackbacks - 0

博客搬家了哦,請移步
叫我abc

常用鏈接

留言簿(12)

隨筆分類

我的博客

搜索

  •  

積分與排名

  • 積分 - 306398
  • 排名 - 84

最新評論

閱讀排行榜

cache_flush算是這個庫最糟糕的一段代碼了,總共有100多行,縮進糟糕,做很多不同的工作。我就納悶,為什么不抽些子函數出來,這樣的代碼基本上不具備維護價值,因為自己重寫一次,比搞明白這個函數有趣多了。
由于這個函數實在太長,所以不一次全貼上來,一部分一部分的看吧。

qsort(E.cache,CACHE_SIZE,sizeof(struct cache_node),cache_node_cmp);

//----------------------------------------
static int
cache_node_cmp(
const void *a,const void *b)
{
    
const struct cache_node *ca=(const struct cache_node *)a;
    
const struct cache_node *cb=(const struct cache_node *)b;
    
if (ca->parent != cb->parent) {
        
return cb->parent - ca->parent;
    }

    
if (ca->parent == -1 ) {
        
return 0;
    }

    
return (ca->child & ~ UNSET_MASK) - (cb->child & ~UNSET_MASK);
}
首先,對 E.cache進行排序,比較子是cache_node_cmp。
return cb->parent - ca->parent ,是用 cb減去ca的,因此首先根據parent_id進行降序排序。注意,在這一比較結果中,如果ca->parent = -1,那么比較結果為正,空閑節點ca往數組右邊移動;如果cb->parent = -1,那么比較結果為負,空閑節點cb還是會處在數組右邊。
為什么要注意這個呢?因為本次排序的一個結果就是,那些空閑節點都集中到了cache數組的右邊,只要遍歷cache的過程中遇到了第一個空閑節點,那么剩下的必然都是空閑節點了。
當然要達成這個排序結果,還需要下面的這步,if (ca->parent == -1 ) {return 0;}
比較子的最后一句,在parent_id相同的情況下,按child_id升序排序。

E.cache經過排序后,呈現出以下狀況:
1.根據parent_id呈降序排序,并且parent_id相同的節點緊挨在一起
2.空閑的cache節點全部都排在了數組的右邊
3.parent_id相同的節點,按child_id升序排序

    while (i<CACHE_SIZE) {

        
if (parent==-1{
            
return;
        }
排序之后,就是遍歷有序的cache數組。可以看到排序的效果了,當parent_id = -1的時候,就只剩下空閑的cache_node,因此可以退出遍歷。

        head=&E.cache[i];
        next
=head;
        sz
=0;

        
while (next->parent == parent && i<CACHE_SIZE) {
            sz 
+= 1 - UNSET_MASK_BIT(next->child);
            
++next;
            
++i;
        }
這一段代碼,是統計同一parent_id下child的數目。因為有些child_id被標記了 UNSET_MASK,因此這種cache節點就不用統計到總數中了。其中UNSET_MASK_BIT是位移操作,如果child被標記了UNSET_MASK,那么位移的結果就是1,1-1=0,也就沒有統計到總數中了。

struct node *node=&E.pool[parent];
children
=node->u.n.children;
統計了parent擁有的child之后,接下來就是要把這些child記錄到parent的數據結構上了。這里不得不回顧一下struct node的定義,上次看的時候,并沒有探討struct link *children是做什么的,現在可以看看link的定義
struct link {
    
int number;
    
int children[1];
}
;
這個結構就是parent用來記錄其所有child_id的地方。其中number用來記錄child的總數量,而children則是一個整數數組,用來記錄所有的child_id。
cache_flush剩下的操作,就是把新的child_id添加到children中去,當然其中包含其他一些細節處理。這里先把這些東西交代清楚,因為其后的代碼將是比較難以理解的,我仍不是十分的明白。
posted on 2008-09-15 21:34 LOGOS 閱讀(2157) 評論(1)  編輯 收藏 引用

FeedBack:
# re: 垃圾收集的那點事(E) 2008-09-16 10:04 zuhd
寫的不錯,云風這段代碼是用c實現的,讀起來確實有點晦澀,作者分析的精神很贊!  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              一区在线视频| 老鸭窝亚洲一区二区三区| 欧美日韩国产欧| 性久久久久久久久久久久| 亚洲国产精品久久久久秋霞影院 | 亚洲色无码播放| 欧美黄色片免费观看| 久久综合色影院| 麻豆精品视频在线观看| 久久久精品免费视频| 亚洲婷婷在线| 99视频超级精品| 亚洲乱码国产乱码精品精可以看 | 裸体一区二区三区| 久久久www成人免费无遮挡大片| 亚洲网站在线观看| 午夜欧美大片免费观看| 亚洲一区二区影院| 西西裸体人体做爰大胆久久久| 一区二区久久| 午夜在线视频观看日韩17c| 先锋影音久久| 久久婷婷人人澡人人喊人人爽 | 亚洲人成在线播放网站岛国| 亚洲国产精品美女| 一本大道久久精品懂色aⅴ| 国产精品看片你懂得| 国产精品成人va在线观看| 国产精品免费在线| 国产一区二区精品| 亚洲日本欧美天堂| 亚洲狼人精品一区二区三区| 亚洲人成在线观看一区二区| 一区二区三区精品| 久久精品国产一区二区三| 欧美成人高清| 在线亚洲国产精品网站| 久久久av毛片精品| 欧美日韩国产在线观看| 欧美成人蜜桃| 欧美午夜无遮挡| 欧美一级淫片播放口| 国产一区二区日韩精品欧美精品| 在线观看精品| 午夜精品久久久久久| 快射av在线播放一区| 香蕉成人伊视频在线观看| 久久夜精品va视频免费观看| 亚洲黄网站黄| 亚洲免费中文| 欧美激情综合网| 国产精品制服诱惑| 1024亚洲| 欧美一区二区精美| 亚洲高清久久久| 亚洲欧美日韩另类| 欧美日韩激情网| 亚洲国产精品成人精品| 亚洲永久在线| 亚洲欧美日韩国产综合精品二区| 欧美成人精品福利| 欧美一区二区三区婷婷月色 | 欧美在线视屏| 欧美一区二区三区日韩视频| 免费日韩精品中文字幕视频在线| 国产精品卡一卡二| 亚洲桃花岛网站| 欧美激情综合| 久久国产精品一区二区| 国产精品永久免费在线| 亚洲女与黑人做爰| 日韩一级免费观看| 亚洲无毛电影| 欧美日韩一区二区视频在线观看| 在线观看欧美视频| 久久久久99| 欧美一区二区三区在线视频| 国产精品麻豆欧美日韩ww | 欧美一区二区在线| 国产精品久久国产精麻豆99网站| 亚洲精品国产视频| 亚洲第一成人在线| 免费在线成人av| 亚洲高清激情| 老司机久久99久久精品播放免费| 香蕉久久精品日日躁夜夜躁| 国产精品视频专区| 欧美在线日韩| 欧美在线免费观看亚洲| 国产一区二区黄色| 美女诱惑一区| 欧美一区二区三区在线视频| 国产视频一区在线观看| 久久精品国产在热久久| 久久久久久网| 亚洲精品社区| 一区二区三区视频免费在线观看| 欧美日韩在线观看视频| 亚洲欧洲99久久| 亚洲一区二区精品| 国产一区欧美| 欧美gay视频激情| 欧美激情一区二区三区成人| 欧美亚韩一区| 久久精品在线观看| 玖玖玖免费嫩草在线影院一区| 亚洲欧美激情视频| 一区视频在线看| 日韩亚洲欧美在线观看| 一区二区三区中文在线观看 | 亚洲一区影音先锋| 久久精品视频va| 亚洲欧美日本国产有色| 欧美顶级艳妇交换群宴| 久久精品中文| 国产精品视频福利| 亚洲毛片在线观看| 亚洲欧洲一区二区天堂久久| 欧美极品欧美精品欧美视频| 久久精品国产99国产精品| 欧美日韩在线看| 亚洲福利视频在线| 黄色国产精品| 性欧美大战久久久久久久免费观看| 中日韩在线视频| 欧美理论电影在线观看| 亚洲国产精品一区制服丝袜| 在线观看三级视频欧美| 久久精品论坛| 麻豆亚洲精品| 亚洲国产精品久久久久久女王| 久久久精品欧美丰满| 久久精品一区二区| 国产日韩免费| 性伦欧美刺激片在线观看| 先锋a资源在线看亚洲| 国产精品嫩草影院一区二区| 一区二区三区四区国产| 亚洲欧美国产毛片在线| 国产精品久久夜| 午夜综合激情| 久久人91精品久久久久久不卡| 国产亚洲一级高清| 久久久亚洲国产天美传媒修理工| 久久深夜福利免费观看| 精品91在线| 欧美二区不卡| 亚洲手机视频| 久久精品夜色噜噜亚洲a∨ | 国产午夜精品美女视频明星a级| 国产精品99久久99久久久二8| 日韩天堂av| 国产精品久久久久久av福利软件 | 国产精品久久久久久妇女6080 | 亚洲福利视频二区| 99国产精品99久久久久久| 欧美精品一线| 亚洲一卡二卡三卡四卡五卡| 欧美一级在线播放| 国产一区日韩二区欧美三区| 久久先锋影音av| 亚洲日本va在线观看| 亚洲性线免费观看视频成熟| 国产精品乱人伦一区二区 | 国产麻豆日韩| 久久影视三级福利片| 亚洲国产精品激情在线观看| 亚洲一区二区三区视频播放| 国产一区二区精品丝袜| 久久综合中文字幕| 日韩一区二区电影网| 久久精品国产一区二区三区免费看 | 亚洲国产人成综合网站| 亚洲砖区区免费| 亚洲精品无人区| 国产精品电影观看| 久久九九久久九九| 欧美激情视频网站| 亚洲影院免费观看| 一区在线视频| 欧美日韩性生活视频| 欧美在线一区二区| 亚洲免费成人av| 欧美aaaaaaaa牛牛影院| 午夜免费日韩视频| 日韩视频中文字幕| 在线观看欧美视频| 国产午夜久久| 国产精品卡一卡二| 欧美日韩一区在线观看| 老鸭窝91久久精品色噜噜导演| 亚洲午夜未删减在线观看| 欧美高清日韩| 久久精品欧洲| 亚洲在线观看| 一本一道久久综合狠狠老精东影业 | 蜜臀91精品一区二区三区| 亚洲一级特黄| 99热在这里有精品免费| 亚洲大片一区二区三区|