Доступ в статически распределенном массиве VS доступ через указатель на статически распределенный массив - PullRequest
0 голосов
/ 13 ноября 2011

Мне нужно хранить количество строк (они останутся постоянными и не будут изменены) в массиве и обращаться к ним много раз, мы хотим добиться как можно более быстрого поиска. Что из нижеперечисленного даст более быстрый доступ:

Подход 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 строк (например, "test1", test2 "и т.
  2. «Пустышка» появится только с несколькими записями.

1 Ответ

1 голос
/ 13 ноября 2011

string_literal1000 не будет компилироваться.

Простой ответ: скажем, та же производительность (поскольку схема распределения идентична).

Однако довольно забавно, что вы хотите, чтобы мы сравнивали скорости, а вы даже не показываете свои схемы использования.

Теперь, после всего сказанного, я могу представить себе ситуации, в которых вы могли бы немного оптимизировать по следующей схеме: если вы знаете длину самой большой записи (они кажутся довольно маленькими), вы можете оптимизировать всю таблицу, упаковав ее в single char [], содержащий отдельные строки, выровненные и дополненные на достаточное количество байтов (скажем, 16 или 32 для строк, показанных в OP).

Без дополнительной информации о реальных сценариях кода было бы неправильно рекомендовать такой подход (IMO).

...