2011-11-12 63 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. 我將有1000記錄(如string_ptr1,sting_ptr2等,或string_literal1,string_literl2等)平均20串conating(如 「測試1」 繞,測試2" 等。
  2. 「虛擬」將出現只有幾個記錄
+1

string_literal1000不會編譯 – sehe

+2

並且string_ptr1000也不會,除此之外,這真的是世界上最後一個應該尋找性能命中的地方。 –

+2

這是我見過的最荒謬的微型優化。不要浪費你的時間,只是編程。 –

回答

1

string_literal1000不會編譯

答案很簡單:。說同樣的性能(因爲分配PA ttern是相同的)。

然而,當您甚至沒有顯示您的使用模式時,您希望我們能夠比較速度是有趣的。現在所有的說法,我可以想象你可以使用以下模式優化一些情況:IFF你知道最大條目的長度(它們看起來很小),你可以優化整個表一個單一的char [],包含單個字符串對齊和填充在一個不錯的字節數(對於OP中顯示的字符串,例如16或32)。

沒有關於實際代碼方案的更多信息,推薦這種方法(IMO)是錯誤的。