} \
(checksum) <<= 8; \
if (c) { \
c = (apr_uint32_t)*++k; \
checksum |= c; \
} \
(checksum) <<= 8; \
if (c) { \
c = (apr_uint32_t)*++k; \
checksum |= c; \
} \
checksum &= CASE_MASK; \
}
宏COMPUTE_KEY_CHECKSUM计算给定key的校验码checksum,因此对于任何的字符串比较都会分为两个步骤:
checksum == next_elt->key_checksum) &&!strcasecmp(next_elt->key, key
首先比较它们的校验码,即前四个字符,如果相等,才会进一步调用strcasecmp进行比较;如果校验整数值不相等,那么就没有必要调用strcasecmp进一步比较。由于整数之间的比较速度比较快,因此通过这种两阶段比较能够有效的提高比较速度。
关于作者
张中庆,目前主要的研究方向是嵌入式浏览器,移动中间件以及大规模服务器设计。目前正在进行Apache的源代码分析,计划出版《Apache源代码全景分析》上下册。Apache系列文章为本书的草案部分,对Apache感兴趣的朋友可以通过flydish1234 at sina.com.cn与之联系!