2016-09-12 2 views
0

Скажет, у меня есть 3 значения:Как производительность многомерного массива сравнивается с массивом объектов?

int age; 
int girth; 
int length; 

было бы более эффективными для хранения и петель через эти значения в многомерном массиве ИЛИ объявить класс с этими 3-х переменными-членами, а затем заполнить массив с объектами этого класс?

+0

Это, вероятно, не будет сильно отличаться. Разумеется, запустите несколько тестов. –

+0

Точно так же. В любом случае компилятор должен генерировать умножение для генерации правильного индекса. – EJP

+0

. Структура может быть проще разрешить и визуализировать, и поскольку это будет 1D-массив, данные будут смежными. Если вы попробуете старый трюк 'int **' для создания динамического 2D-массива (массив массивов), вы можете столкнуться с проблемами с пропуском кеша. – user4581301

ответ

0

Если вы хотите интерпретировать каждое измерение как одно из ваших значений, это будет нормально для размеров небольших массивов. Несмотря на это, когда вы выйдете из кеша, вы, вероятно, столкнетесь с огромным снижением производительности, если хотите получить доступ к первому элементу первого измерения, а затем по второму и третьему измерениям. Это связано с расположением памяти многомерных массивов и кэшированием процессора.

Если вы будете иметь его как структуру или все 3 значения интерпретируются как одно измерение массива, и если вы будете продолжать обращаться к этому массиву обходным способом (например, не прыгать), то вы получите, вероятно, максимальная производительность.

Таким образом, это должно быть так:

struct entry 
{ 
    int age; 
    int girth; 
    int length; 
} 

std::array<entry, /*size*/> entries; 
Смежные вопросы