Массив структур или структура массива в C - PullRequest
4 голосов
/ 19 декабря 2010

Какой из этих двух вариантов является самым быстрым / наименее потребляющим память:

struct {
int index;
char string[10];
} a[10];

или

struct {
int index[10];
char string[10][10];
} a;

Первый явно проще в использовании и реализации.Я также должен упомянуть, что я буду выделять их динамически.Но какой из них будет работать быстрее или займет меньше времени?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 19 декабря 2010
struct {
    int index;
    char string[10];
} a[10];

будет вводить заполнение для каждого элемента a[].

Второе решение будет вводить заполнение только один раз.

Если вы собираетесь выделить большое количество элементов в a[], то вы заплатите цену за покрытие более крупного домена (не говоря уже о разыменовании).

2 голосов
/ 19 декабря 2010

Не беспокойтесь о преждевременной оптимизации.Используйте тот, который легче понять / поддерживать.Поскольку это C, разница в производительности едва заметна.

1 голос
/ 19 декабря 2010

2-й, вероятно, будет меньше по памяти, просто потому что sizeof struct выше 8, а не 5 из-за заполнения (при условии, что int 32-битный).

Что касается того, что быстрее, я бы сказал, это будет зависеть от того, что вы делаете; 2-й типичный пример ориентированного на данные проекта (не путать с дизайном, управляемым данными). Пожалуйста, смотрите эту статью: http://gamesfromwithin.com/data-oriented-design

РЕДАКТИРОВАТЬ: Тем не менее, я согласен с Миланом здесь (при другом ответе) - не пытайтесь оптимизировать преждевременно или вообще. Оба достаточно быстры; Я не подчеркивал это раньше, потому что подумал, что это может понадобиться для встроенной системы, где это может иметь значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...