跳转到内容

快速路徑

本页使用了标题或全文手工转换
维基百科,自由的百科全书

程式設計中,快速路徑(英語:fast path)是指在一個程式中比起一般路徑有更短指令路徑長英语Instruction path length的路徑。有效的快速路徑會在處理最常出現的的情形上比一般路徑更有效率,讓一般路徑處理特殊情形、邊角情形、錯誤處理與其它反常狀況。快速路徑是程式最佳化英语Program optimization的一種形式。

例子

[编辑]

在以下的 UTF-8 解碼的程式碼[1]中:

/* 改編程式碼 */
if (*_s < 0x80) {
    while (true) {
        unsigned long value = *(unsigned long *) _s;
        if (!next_8bytes_are_ascii(value))
            break;
        _p[0] = (value & 0xFFu);
        _p[1] = ((value >> 8) & 0xFFu);
        _p[2] = ((value >> 16) & 0xFFu);
        _p[3] = ((value >> 24) & 0xFFu);
        _p[4] = ((value >> 32) & 0xFFu);
        _p[5] = ((value >> 40) & 0xFFu);
        _p[6] = ((value >> 48) & 0xFFu);
        _p[7] = ((value >> 56) & 0xFFu);
    }
    s++;
    *p++ = ch;
    continue;   // 繼續外層的大迴圈
}

if (*_s < 0xC2) {
    /*  不合法序列
        \x80-\xBF -- 接續位元組
        \xC0-\xC1 -- 假 0000-007F */
    ...
}

if (ch < 0xE0) {
    /* \xC2\x80-\xDF\xBF -- 0080-07FF */
    ...
}

if (ch < 0xF0) {
    /* \xE0\xA0\x80-\xEF\xBF\xBF -- 0800-FFFF */
    ...
}

if (ch < 0xF5) {
    /* \xF0\x90\x80\x80-\xF4\x8F\xBF\xBF -- 10000-10FFFF */
    ...
}

ASCII 的 UTF-8 解碼走的就是結合迴圈展開的快速路徑。

參考資料

[编辑]