エントリーの編集
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
標準ライブラリ関数のstrchrは何故速いのか - Qiita
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
標準ライブラリ関数のstrchrは何故速いのか - Qiita
下記のような自前実装のstrchr()を書いてライブラリ関数と速度比較をしたところ、ライブラリ関数の方が... 下記のような自前実装のstrchr()を書いてライブラリ関数と速度比較をしたところ、ライブラリ関数の方が劇的に速いという結果になりました(sの文字列長が長いと自前実装の方が約20倍約6倍遅かった)。 実験に使ったコードはシンプルなもので、そこまで品質が悪いとは思えません。なぜそんなに劇的な差がついたのでしょうか。 char *my_strchr(const char *s, char c) { char *p = (char *)s; do { if (*p == c) { return p; } } while (*p++ != '\0'); return NULL; } 調べてみたところ、ライブラリ関数はC言語ではなくマシン語で実装されており、SIMD命令であるAVX2命令が使われていることがわかりました。SIMD命令はベクトル演算を行うマシン語命令で、1命令で複数の演算(今回なら比較