Выбор структуры памяти N-мерного массива

Я начал писать библиотеку для n-мерных векторов.

Есть несколько конструктивных особенностей, которые я хотел бы поддержать в этой библиотеке:

  • Расположение памяти непрерывно. Это связано с тем, что совместное использование памяти, отправка по сети и сохранение в файл - это всего лишь передача указателя.
  • Различные размеры могут поддерживать различные размеры элементов (т.е. [0][0] может быть 1 байт в то время как [1][0] может быть 2 байт).

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

Вот первый способ. Оба представления являются визуализацией массива [2][4][3].

 ---------------------------
| index             | 0:0:0 |
| elementSize       |       |
| elementCount      |       |
| expansionBoundary |       |
| slotCount         |       |
 ---------------------------
 ---------------------------
| index             | 1:0:0 |
| elementSize       |       |
| elementCount      |       |
| expansionBoundary |       |
| slotCount         |       |
 ---------------------------
     ---------------------------
    | index             | 0:0:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
     ---------------------------
    | index             | 0:1:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
     ---------------------------
    | index             | 0:2:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
     ---------------------------
    | index             | 0:3:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
     ---------------------------
    | index             | 1:0:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
     ---------------------------
    | index             | 1:1:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
     ---------------------------
    | index             | 1:2:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
     ---------------------------
    | index             | 1:3:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 0:0:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:0:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:0:2 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:1:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:1:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:1:2 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:2:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:2:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:2:2 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:3:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:3:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:3:2 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:0:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:0:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:0:2 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:1:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:1:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:1:2 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:2:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:2:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:2:2 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:3:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:3:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:3:2 |
        | Element           |       |
         ---------------------------

Вот второй способ.

 ---------------------------
| index             | 0:0:0 |
| elementSize       |       |
| elementCount      |       |
| expansionBoundary |       |
| slotCount         |       |
 ---------------------------
     ---------------------------
    | index             | 0:0:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 0:0:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:0:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:0:2 |
        | Element           |       |
         ---------------------------
     ---------------------------
    | index             | 0:1:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 0:1:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:1:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:1:2 |
        | Element           |       |
         ---------------------------
     ---------------------------
    | index             | 0:2:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 0:2:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:2:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:2:2 |
        | Element           |       |
         ---------------------------
     ---------------------------
    | index             | 0:3:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 0:3:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:3:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 0:3:2 |
        | Element           |       |
         ---------------------------
 ---------------------------
| index             | 1:0:0 |
| elementSize       |       |
| elementCount      |       |
| expansionBoundary |       |
| slotCount         |       |
 ---------------------------
     ---------------------------
    | index             | 1:0:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 1:0:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:0:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:0:2 |
        | Element           |       |
         ---------------------------
     ---------------------------
    | index             | 1:1:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 1:1:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:1:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:1:2 |
        | Element           |       |
         ---------------------------
     ---------------------------
    | index             | 1:2:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 1:2:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:2:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:2:2 |
        | Element           |       |
         ---------------------------
     ---------------------------
    | index             | 1:3:0 |
    | elementSize       |       |
    | elementCount      |       |
    | expansionBoundary |       |
    | slotCount         |       |
     ---------------------------
         ---------------------------
        | Index             | 1:3:0 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:3:1 |
        | Element           |       |
         ---------------------------
         ---------------------------
        | Index             | 1:3:2 |
        | Element           |       |
         ---------------------------

Есть ли определенные преимущества / недостатки в выборе одного макета над другим?

0 ответов

Другие вопросы по тегам