1.1.3 Реализация массивов
Стандартным способом реализации статических массивов с одним типом элементов является следующий:
Под массив выделяется непрерывный блок памяти объёмом
S*m1*m2*m3…mn,
где S -- размер одного элемента, а m1…mn -- размеры диапазонов индексов (то есть количество значений, которые может принимать соответствующий индекс).
При обращении к элементу массива A[i1, i2, i3, … in] адрес соответствующего элемента вычисляется как
B+S*(i1p*m1+i2p*m2+…+i(n-1)p*mn-1+inp),
где B -- база (адрес начала блока памяти массива), ikp-значение k-го индекса, приведённое к целому с нулевым начальным смещением.
Таким образом, адрес элемента с заданным набором индексов вычисляется так, что время доступа ко всем элементам массива одинаково. Первый элемент массива, в зависимости от языка программирования, может иметь различный индекс. Различают три основных разновидности массивов: с отсчетом от нуля (zero-based), с отсчетом от единицы (one-based) и с отсчетом от специфического значения заданного программистом (n-based).
Отсчет индекса элемента массивов с нуля более характерен для низкоуровневых языков программирования, однако этот метод был популяризирован в языках более высокого уровня языком программирования С.
Более сложные типы массивов -- динамические и гетерогенные -- реализуются сложнее.
- Введение
- 1. Теоретическая часть
- 1.1 Общее понятие о массивах
- 1.1.1 Определение и область применения
- 1.1.2 Специфические типы массивов
- 1.1.3 Реализация массивов
- 1.1.4 Достоинства массивов
- 1.1.5 Недостатки массивов
- 1.2 Массивы в Object Pascal
- 1.2.1 Статические массивы
- 1.2.2 Динамические массивы
- 1.2.3 Функции для работы с массивами
- 2. Практическая часть
- 2.1 Постановка задачи
- 2.3 Описание модулей
- 2.3.1 Модуль MatrixOperations
- 2.3.2 Модуль fileIO
- 3. Эксплуатационная документация
- 3.1 Описание применения
- 3.2 Руководство оператора
- Выводы