Языки программирования - концепции и принципы

в Ada для обозначения указателей


Ptr.all[78]                          -- Запись с целочисленным полем

Ptr.all[78].Field                  --Целочисленное поле

Обратите внимание, что в Ada для обозначения указателей используется клю­чевое слово access, а не символ. Ключевое слово all используется в тех немно­гих случаях, когда требуется разыменование без выбора.

 

 

 

Реализация

Для косвенного обращения к данным через указатели требуется дополнитель­ная команда в машинном коде. Давайте сравним прямой оператор присваива­ния с косвенным присваиванием, например:



C

int i,j;

int*p = &i;

int *q = &j;

i=j;                                         /* Прямое присваивание */

*p = *q;                                /* Косвенное присваивание */

Машинные команды для прямого присваивания:

C

load          R1J                                                      

store         R1,i

в то время как команды для косвенного присваивания:

load        R1,&q                  Адрес (указуемого объекта)                                 

C

load        R2,(R1)                Загрузить указуемый объект

load        R3,&p                  Адрес (указуемого объекта)

store       R2,(R3)                Сохранить в указуемом объекте

При косвенности неизбежны некоторые издержки, но обычно не серьезные, поскольку при неоднократном обращении к указуемому объекту оптимизатор может гарантировать, что указатель будет загружен только один раз. В опера­торе

p->right = p->left;

раз уж адрес р загружен в регистр, все последующие обращения могут вос­пользоваться этим регистром:

load          R1 ,&p                    Адрес указуемого объекта

load          R2,left(R1)             Смещение от начала записи

store         R2,right(R1)           Смещение от начала записи

Потенциальным источником неэффективности при косвенном доступе к данным через указатели является размер самих указателей.

Содержание раздела