静的に割り当てられた配列へのアクセスVS静的に割り当てられた配列へのポインタによるアクセス

私は文字列の数を格納する必要があります(それらは定数のままであり、変更されません)、配列内で、何度もアクセスするため、可能な限り高速に検索したいと考えています。次のうちどれが速くアクセスできるか:

アプローチ1:

const char* string_literal[] = {"Test1","Dummy","Dummy","Test2","Test3","Dummy"};//      storing as string literals
... ... ... ...
... ... ... ...
const char* string_literal1000[]= {"Beta1","Beta2","Beta3"};

アプローチ2:

const char test1ptr[] = "Test1",
const char test2ptr[] = "Test2",
const char test3ptr[] = "Test3",
const char dummyptr[] = "Dummy",


const char* string_ptr1 [] = {test1ptr,dummyptr,dummyptr,test2ptr,test3ptr,dummyptr};//storing as pointers
... ... ...
const char* string_ptr1000[] = {"Beta1","Beta2","Beta3"};

または、それはアプローチ1であり、アプローチ2は同じパフォーマンスになりますか?

注意:

  1. 平均20文字列(例:「test1」、「test2」など)で約1000件のレコード(string_ptr1、sting_ptr2など、string_literal1、string_literl2など)
  2. 「ダミー」は少数のレコードしか表示されません。
0
追加された 編集された
ビュー: 1
どこでも const char * を持っていれば、実際には const char * const を意味するでしょう。
追加された 著者 aschepler,
string_literal1000はコンパイルされません
追加された 著者 sehe,
そしてどちらもstring_ptr1000ではありませんが、これ以外にも、これは実際には世界でパフォーマンスヒットを探している最後の場所です。
追加された 著者 Seth Carnegie,
私が知る限り、コンパイラがどちらかを最適化すると、同じコードが吐き出されます。
追加された 著者 netcoder,
これは私が今まで見た中で最もばかげたミクロ最適化です。あなたの時間を無駄にせず、ちょうどプログラム。
追加された 著者 Benjamin Lindley,
コンパイルの問題を修正しました。あなたの応答に感謝します。私はここで最適化を探すつもりはありません。
追加された 著者 learningstack,
@aschelper:不足しているconstを指摘してくれてありがとう。
追加された 著者 learningstack,

1 答え

string_literal1000はコンパイルされません。

単純な答え:同じパフォーマンスを言う(割り当てパターンは同じなので)。

しかし、使用パターンを表示していなくても、スピードを比較してほしいというのは面白いことです。

今では、次のパターンで少し最適化できる状況を想像することができます:IFFでは、最大のエントリの長さを知っています(小さなケースのように見えます)。テーブル全体を単一のcharにパックすることで最適化できます[ ]で、整列され、素敵なバイト数(例えばOPに表示されている文字列の場合は16または32)で詰め込まれた個々の文字列を含みます。

実際のコードシナリオの詳細については、そのようなアプローチ(IMO)を推奨するのは間違いでしょう。

1
追加された