c89
gcc (GCC) 4.7.2
こんにちは、
文中のさまざまな単語を検索する必要があるため、いくつかの文字列関数を調べています。
私はちょうどc標準関数が完全に最適化されているのだろうかと思っています。
たとえば、次のような
関数:memchr
、、、、などstrstr
strspn
strchr
高性能という点では、それが私に必要なものです。もっと良いものはありますか?
よろしく、
c89
gcc (GCC) 4.7.2
こんにちは、
文中のさまざまな単語を検索する必要があるため、いくつかの文字列関数を調べています。
私はちょうどc標準関数が完全に最適化されているのだろうかと思っています。
たとえば、次のような
関数:memchr
、、、、などstrstr
strspn
strchr
高性能という点では、それが私に必要なものです。もっと良いものはありますか?
よろしく、
標準ライブラリ関数が可能な限り最適化されていることはほぼ間違いなくわかります。おそらく、Cでコーディングしたものよりも優れています。
これは一般的な場合であることに注意してください。関数に適用できる制限がある場合、またはデータ自体に追加の情報がある場合は、その制限または情報の利点があるため、コードをより高速に実行できる可能性があります。 。
たとえば、アプリケーションが256バイトを超えることは決してないことを知っていたのでmalloc
、ライブラリが提供するCコードを作成しました。そのため、要求ごとに256バイトを指定しました。malloc
はい、それはメモリの浪費でしたが、一般的な場合を超えて速度を向上させることができました。
しかし、一般的なケースでは、提供されたものに固執する方が良いでしょう。
完全に最適化されていますか?何のために最適化されていますか?
はい、stdlibのC関数は非常に効率的に作成されており、何年にもわたってテスト/デバッグされているため、ほとんどの関数について心配する必要はありません。
データを常に16バイト境界に揃え、約16バイト余分に割り当てるたびに割り当てると仮定すると、ほとんどのstdlibルーチンを高速化することは間違いなく可能です。
しかし、例えばそれを仮定します。strlenは事前に知られていないか、1バイトだけを読みすぎるとセグメンテーション違反が発生する可能性があるので、気にしないでください。