Всегда старайтесь, чтобы во-первых написать читаемый и обслуживаемый код и только затем оптимизировать.
В C++, как и в добром старшем C, память выделяется в одном большом куске (мин. 10240 байт) внутренне на brk
или sbrk
. Представьте себе, что вы ранее выделили и освободили некоторую память.
Корпус 1: вы создаете 3 массива. Скорее всего, среди используемых было бы несколько бесплатных кусков. Таким образом, он будет в основном перебирать список свободных кусков и размещать их в соответствии с алгоритмом, вероятно, лучше всего подходит (, но не только). В любом случае, это могло бы (или могло бы, так как во время выполнения нет четкого ответа) разбросайте их по уже выделенной памяти. Скажем, что 1 находится посередине, а остальные два - в конце.
Корпус 2: вы создаете 1 массив. Тогда он будет выделен в одном месте. Или недавно приобретенное хранилище или имеющееся.
Итак, я бы пошел с 2x мерным массивом 1x3. Таким образом, вы получите выгоду от местоположения ссылочного принципа, в частности местонахождение памяти.
Однако, как я уже сказал, вы должны быть уверены, что использование 2-мерного массива не повредит читаемости с точки зрения возможности подключения данных.
Надеюсь, что это проливает свет!
Это очень зависит от способа доступа к данным. Существуют разные алгоритмы, которые будут полезны в любом случае из-за кеширования среди других факторов. – twalberg
Ваше имя говорит NxM, но ваше тело говорит 1x3. Почему вы используете массив 1x3? Вы имели в виду Nx3 в теле? – user2357112
Это частный случай многолетнего объекта Array-Of-Structures vs Structure-of-Arrays. Как говорит @twalberg, это зависит только от доступа вашего массива. Если вы будете работать по одному измерению больше, чем другие, - все (скажем) x-компоненты скоростей вместе, как и все компоненты скорости каждой частицы - имеет смысл держать эти данные близко друг к другу. Но обратите внимание, что здесь вы получите эту выгоду, если бы ваш массив был упорядочен как (например) 'double vel [NPTS] [NDIMS]' vs 'double vel [NDIMS] [NPTS]' - на самом деле отдельные массивы 'vx [NPTS ], vy [NPTS], vz [NPTS] 'было бы болью. –