2011-11-12 18 views
0

配列内の文字列の数(それらは定数のままで変更されない)を格納し、私たちはできるだけ早くルックアップを達成したいと考えています。以下のどちらがより高速なアクセスを提供します:静的に割り当てられた配列へのアクセス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" をconatingレコードの1000(例えばstring_ptr1、sting_ptr2などまたはstring_literal1、string_literl2など)の周りに持っているだろう、TEST2" など。
  2. 「ダミー」わずか数レコードに表示されます
+1

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

+2

また、string_ptr1000も、それ以外にも、実際にはパフォーマンスヒットを探すべき世界の最後の場所です。 –

+2

これは私が今まで見た中で最もばかげたミクロ最適化です。あなたの時間を無駄にせず、ちょうどプログラム。 –

答えて

1

string_literal1000がコンパイルされないでしょう

単純な答え:。。と言う割り当てPA以来、同じ性能(タタンは同じです)。

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

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

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

関連する問題