Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
В компьютерном программировании, вектор описания — это структура данных, используемая для хранения информации об объекте данных, в частности, о его организации в памяти.
In computer programming, a dope vector is a data structure used to hold information about a data object, especially its memory layout.
Цель
Допинг-векторы чаще всего используются для описания массивов, которые обычно хранят несколько экземпляров конкретного типа данных в виде непрерывного блока памяти. Например, массив, содержащий 100 элементов, каждый из которых занимает 32 байта, требует 100 × 32 байта. Сам по себе такой блок памяти не содержит информации о том, насколько велик массив (или другой объект) в целом, каков размер каждого элемента в нем или сколько элементов в нем содержится. Допинг-вектор – это место для хранения такой информации. Допинг-векторы также могут описывать структуры, которые могут содержать массивы или переменные элементы. Если такой массив хранится непрерывно, при этом первый байт расположен по адресу M, то его последний байт будет находиться по адресу M + 3199. Главное преимущество этой организации заключается в том, что найти элемент N легко: он начинается по адресу M + (N × 32). Разумеется, значение 32 должно быть известно (это значение обычно называют "шагом" массива или "шириной" элементов массива). Навигация по структуре данных массива с использованием индекса называется вычислением по индексу. Однако такая организация (без использования допинг-векторов) означает, что знание адреса элемента N недостаточно для определения самого индекса N, шага или наличия элементов по адресам N − 1 или N + 1. Например, функция или метод могут перебирать все элементы в массиве и передавать каждый из них другой функции или методу, который не знает, что элемент является частью массива, не говоря уже о том, где он находится и каков размер массива. Без допинг-вектора даже знание адреса всего массива не позволяет определить его размер. Это важно, поскольку запись в элемент N + 1 в массиве, содержащем только N элементов, скорее всего, приведет к повреждению других данных. Поскольку многие языки программирования рассматривают строки символов как разновидность массива, это напрямую приводит к печально известной проблеме переполнения буфера. Допинг-вектор снижает эти проблемы, сохраняя небольшое количество метаданных вместе с массивом (или другим объектом). С помощью допинг-векторов компилятор может легко (и опционально) вставлять код, предотвращающий случайную запись за пределы массива или другого объекта. В качестве альтернативы, программист может обращаться к допинг-вектору при необходимости для обеспечения безопасности или других целей.
Dope vectors are most commonly used to describe arrays, which commonly store multiple instances of a particular datatype as a contiguous block of memory. For example, an array containing 100 elements, each of which occupies 32 bytes, requires 100 × 32 bytes. By itself, such a memory block has no place to keep track of how large the array (or other object) is overall, how large each element within it is, or how many elements it contains. A dope vector is a place to store such information. Dope vectors can also describe structures which may contain arrays or variable elements. If such an array is stored contiguously, with the first byte at memory location M, then its last byte is at location M + 3199. A major advantage of this arrangement is that locating item N is easy: it begins at location M + (N × 32). Of course, the value 32 must be known (this value is commonly called the "stride" of the array or the "width" of the array's elements). Navigating an array data structure using an index is called dead reckoning. This arrangement, however (without adding dope vectors) means that having the location of item N is not enough to discover the index N itself; or the stride; or whether there are elements at N − 1 or N + 1. For example, a function or method may iterate over all the items in an array and pass each one to another function or method, which does not know the item is part of an array at all, much less where or how large the array is. Without a dope vector, even knowing the address of the entire array does not tell you how big it is. This is important because writing to the N + 1 element in an array that only contains N elements, will likely destroy some other data. Because many programming languages treat character strings as a kind of array, this leads directly to the infamous buffer overflow problem. A dope vector reduces these problems by storing a small amount of metadata along with an array (or other object). With dope vectors, a compiler can easily (and optionally) insert code that prevents accidentally writing beyond the end of an array or other object. Alternatively, the programmer can access the dope vector when desired, for safety or other purposes.