將大小為1G的src緩沖區中的數據復制到dst緩沖區中,并且跳過所有空格。
下面兩種循環風格,哪一種你更喜歡?
哪種效率更高呢?Try it~
-----------------------------------
在關鍵數據路徑上,如果需要對每一字節都進行檢查,那么使用的檢查方法需要格外謹慎。在上例中,I直接檢查src[i]是否為空格,II采用了isspace函數來檢查,直接檢查只需要一次比較,而函數調用則需要一次call和一次比較(isspace函數內部)。從理論上分析,后者速度肯定要慢,實際呢?我以為isspace在libc中只是一個宏,查了一下代碼才知道,它定義如下(NOT from glibc):
#define _S 0x08
extern
const
char
*_ctype_;
__CTYPE_INLINE
int
isspace
(
int
c)
{
return
(c == -
1
?
0
: ((_ctype_ +
1
)[(
unsigned
char
)c] & _S));
}
雖然定義成了一個inline函數,但是依然沒有直接比較來得直接簡單。
簡單地將isspace替換成直接比較,讓我的解壓速度(我在做xxx的解壓)從140MB/s上升到200MB/s,非常不錯。
關鍵路徑上編碼,要減少頻繁的函數調用,不能只要風度不要溫度。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
