NF

地方で働くプログラマ

3回目:strlenはやい(後編)

後編ってなんだよ。
また1日遅刻しました。厳密には24時間超えてるけど。

前回、glibcのstrlen()って工夫してて早いですね、みたいな事を書いたんですが、勘違い(?)をしてた箇所があったので、急に後編にしました。お馴染みのstackoverflow。
c - Why does glibc's strlen need to be so complicated to run quickly? - Stack Overflow

On popular ISAs like x86 and ARM, glibc uses hand-written asm

 
という訳で、x86とか主流のISAの環境では先週の実装は使われておらず(遅いので)、手書きのアセンブラで書かれてるという事でした。C言語すら書かず、SIMD命令とか使ってもっと最適化してるようです。x86_64なら多分↓のコード。
glibc/strlen.S at master · lattera/glibc · GitHub
 
思ったより深い話でした。元のビット演算は未定義動作含まれてるけどasmなら関係ないとか、特定の最適化オプションで遅くなるのはこれが理由だとか、情報が多すぎます。アセンブラ自体は何やってるか分からないけど、コメントは一通り読んでみよう。
x86-64アセンブリはこのサイト様を参考にさせて貰おうかな…
原書で学ぶ64bitアセンブラ入門(2) - わらばんし仄聞記
 
おわり