Деректер массивінің құрылымын сипаттаушы "доп" векторы
Dope vector
Доп векторлары – дерек құрылымдары, компьютердегі мәліметтерді, әсіресе жад орналасуын сақтайды. Массивтерді сипаттауда маңызды, көлем мен элемент санын анықтайды.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Компьютерлік бағдарламалауда, доп векторы — дерек объектісі туралы ақпаратты, әсіресе оның жадтағы орналасуын сақтауға қолданылатын дерек құрылымы.
In computer programming, a dope vector is a data structure used to hold information about a data object, especially its memory layout.
Мақсаты
Доп векторлары көбінесе массивтерді сипаттау үшін қолданылады, олар әдетте белгілі бір дерек типінің бірнеше даналарын жадтың тікелей блогы ретінде сақтайды. Мысалы, әрқайсысы 32 байтты алатын 100 элементтен тұратын массивке 100 × 32 байт қажет. Өзінен, мұндай жад блогы массивтің (немесе басқа объектінің) жалпы көлемін, оның ішіндегі әрбір элементтің көлемін немесе оның құрамында қанша элемент бар екенін қадағалауға арналған орын жоқ. Доп векторы – осындай ақпаратты сақтауға арналған орын. Доп векторлары массивтерді немесе өзгермелі элементтерді қамтитын құрылымдарды да сипаттай алады. Егер мұндай массив тікелей сақталса, ал бірінші байты M жад мекенжайында орналасса, онда соңғы байты M + 3199 мекенжайында болады. Бұл құрылымның басты артықшылығы – N элементін табу оңай: ол M + (N × 32) мекенжайынан басталады. Әрине, 32 саны белгілі болуы керек (бұл мән әдетте массивтің «қадамы» немесе массивтің элементтерінің «ені» деп аталады). Индекс арқылы массивтік дерек құрылымын қарау «өлген есептеу» деп аталады. Алайда, бұл орналасу (доп векторларын қоспай) N элементінің мекенжайын білу, N индексінің өзін анықтау үшін жеткіліксіз; немесе қадамын; немесе N - 1 немесе N + 1 элементтері бар-жоғын. Мысалы, функция немесе әдіс массивтегі барлық элементтерді итерациялап, әрқайсысын басқа функцияға немесе әдіске жіберуі мүмкін, ол элементтің массивтың бөлігі екенін білмейді, тіпті массив қайда орналасқан және оның көлемі қандай екенін де білмейді. Доп векторы болмаса, тіпті бүкіл массивтің мекенжайын білу оның қаншалықты үлкен екенін көрсетпейді. Бұл маңызды, өйткені тек N элементті қамтитын массивтегі N + 1 элементіне жазу басқа деректерді жоюы мүмкін. Көптеген бағдарламалау тілдері таңбалар тізбегін массив түрінде қарастыратындықтан, бұл тікелей атақты буфердің толып кету мәселесіне әкеледі. Доп векторы осы мәселелерді массивпен (немесе басқа объектімен) бірге шағын көлемдегі метадеректерді сақтау арқылы азайтады. Доп векторларымен компилятор кодты оңай (және мүмкіндігінше) енгізе алады, бұл массивтің немесе басқа объектінің соңынан тыс жазуды болдырмайды. Сонымен қатар, бағдарламалаушы қауіпсіздік немесе басқа мақсаттар үшін қалаған кезде доп векторына қол жеткізе алады.
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.