Поделиться через


Основанные указатели (C)

Блок, относящийся только к системам Майкрософт

__based (Справочник по C ++)

В 32- и 64-разрядных компиляторах Microsoft базовый указатель является 32- или 64-разрядным смещением от 32- или 64-разрядной базы указателя. Базовая адресация полезна для управления разделами, в которых размещены объекты, поскольку уменьшается размер исполняемого файла и увеличивается скорость выполнения. Как правило, используется следующая форма определения относительного указателя.

type __based( base ) declarator

Вариант базовой адресации, основанный на указателе, позволяет использовать спецификацию указателя в качестве базы. В свою очередь, относительный указатель является смещением в раздел памяти, который начинается в начале указателя, на котором он основан. Указатели, основанные на адресах указателей, являются единственной формой ключевого слова __based, допустимой в 32- и 64-разрядных компиляциях. В таких компиляциях они представляют собой 32- или 64-разрядные смещения от 32- или 64-разрядной базы.

Указатели на основе указателей, в частности, используются для постоянных идентификаторов, которые содержат указатели. Связанный список, состоящий из указателей на основе указателей, можно сохранить на диск, а затем перезагрузить в другое место в памяти. При этом все указатели останутся действительными.

В следующем примере показан указатель на основе указателя.

void *vpBuffer;

struct llist_t
{
    void __based( vpBuffer ) *vpData;
    struct llist_t __based( vpBuffer ) *llNext;
};

Указателю vpBuffer назначается адрес в памяти, который выделяется на более позднем этапе программы. Связанный список перемещается относительно значения vpBuffer.

Завершение блока, относящегося только к системам Майкрософт

См. также

Деклараторы и объявления переменных