Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Блок, относящийся только к системам Майкрософт
В 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
.
Завершение блока, относящегося только к системам Майкрософт