2010-12-08 1 views
1

В чем разница между хранением многомерных массивов в памяти в мажорных строках или майнером колонок?В чем разница между хранением многомерных массивов в памяти в мажорных строках или майнером колонок?

Насколько я знаю, «C», похоже, следует за стилем Row Major.

Просто из любопытства я хотел бы знать, есть ли какие-либо преимущества одного стиля над другим?

ответ

2

В общем, вы можете эмулировать каждый из них с другим, так что нет никакого неотъемлемого преимущества для одного над другим. Тем не менее, реализации кэша обычно рассматривают локальность ссылки как положительный фактор для оценки того, скоро ли будет доступно доступ к памяти. Это может иметь последствия для производительности. Например, в строке-мажорных реализации, этот фрагмент кода:

int sum = 0; 
for (int i = 0; i < n; ++i) 
    for (int j = 0; j < m; ++j) 
    sum += a[i][j]; 

, вероятно, будет быстрее, чем:

int sum = 0; 
for (int i = 0; i < m; ++i) 
    for (int j = 0; j < n; ++j) 
    sum += a[j][i]; 

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

+0

Спасибо за ответ. Интересно, не существует ли неотъемлемого преимущества одного над другим, то почему разные языки следуют различным стилям? – Jay 2010-12-08 06:09:23

Смежные вопросы