Введение

В компьютерном программировании, вектор описания — это структура данных, используемая для хранения информации об объекте данных, в частности, о его организации в памяти.

Цель

Допинг-векторы чаще всего используются для описания массивов, которые обычно хранят несколько экземпляров конкретного типа данных в виде непрерывного блока памяти. Например, массив, содержащий 100 элементов, каждый из которых занимает 32 байта, требует 100 × 32 байта. Сам по себе такой блок памяти не содержит информации о том, насколько велик массив (или другой объект) в целом, каков размер каждого элемента в нем или сколько элементов в нем содержится. Допинг-вектор – это место для хранения такой информации. Допинг-векторы также могут описывать структуры, которые могут содержать массивы или переменные элементы. Если такой массив хранится непрерывно, при этом первый байт расположен по адресу M, то его последний байт будет находиться по адресу M + 3199. Главное преимущество этой организации заключается в том, что найти элемент N легко: он начинается по адресу M + (N × 32). Разумеется, значение 32 должно быть известно (это значение обычно называют "шагом" массива или "шириной" элементов массива). Навигация по структуре данных массива с использованием индекса называется вычислением по индексу. Однако такая организация (без использования допинг-векторов) означает, что знание адреса элемента N недостаточно для определения самого индекса N, шага или наличия элементов по адресам N − 1 или N + 1. Например, функция или метод могут перебирать все элементы в массиве и передавать каждый из них другой функции или методу, который не знает, что элемент является частью массива, не говоря уже о том, где он находится и каков размер массива. Без допинг-вектора даже знание адреса всего массива не позволяет определить его размер. Это важно, поскольку запись в элемент N + 1 в массиве, содержащем только N элементов, скорее всего, приведет к повреждению других данных. Поскольку многие языки программирования рассматривают строки символов как разновидность массива, это напрямую приводит к печально известной проблеме переполнения буфера. Допинг-вектор снижает эти проблемы, сохраняя небольшое количество метаданных вместе с массивом (или другим объектом). С помощью допинг-векторов компилятор может легко (и опционально) вставлять код, предотвращающий случайную запись за пределы массива или другого объекта. В качестве альтернативы, программист может обращаться к допинг-вектору при необходимости для обеспечения безопасности или других целей.