2

少なくとも g++ を使用する strcmp には、多くのアーキテクチャに対して多くの最適化があります。私の PC、Core2Duo E8400 では、strcmp は、straigforward 実装を使用するよりも 2 倍高速です。

2 つの「逆文字列」を比較する関数を提供するライブラリが存在するかどうか、私の質問です。逆文字列char *s1は、(whereおよび for all ) で始まり、そのようなものs1で終わります。s1-ns1-n == '\0'n >= 00 <= n' < n, s1-n' != '\0'

もちろん、要件は、この関数が strcmp のように効率的で移植可能でなければならないということです。

編集:2つの文字列が等しいかどうかを知る必要があるだけです(したがって、どちらが大きいかを知る必要はありません。原則として、strcmpの同じ最適化は、逆の文字列に対してもうまく機能します)。

4

2 に答える 2

1

私が知っていることから、特定のアーキテクチャの strcmp のほとんどの最適化では、整列されたポインターなどで long にキャストするなど、複数のバイトを一緒に比較するトリックが使用されます。これらの種類の最適化は、文字列の反転を比較して機能する可能性は高くありません。つまり、逆は長い場合と同じにはならず、同じ数値を生成するためにもう一度反転すると、効率が低下します。したがって、私の意見では答えはノーです。

于 2012-09-24T11:21:43.933 に答える
0

私があなたの問題、逆を持っていたらstrcmp、私はそれを書くだけです. いくつかの理由から、速度について心配する必要はありません。

第一に、重大な「ボトルネック」を持つプログラムstrcmpはほとんどありません。

第 2strcmpに、最初の等しくない文字で停止するため、文字列が長くてほぼ等しい場合を除き、比較する文字は平均してほとんどありません。同等またはほぼ同等の文字列を比較することに多くの時間を費やすプログラムは、何らかのパフォーマンス チューニングを必要としています。

于 2012-09-24T11:47:10.063 に答える