2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Принципиальное отличие в представлении массивов и записей?
Сообщение06.06.2009, 19:36 
Аватара пользователя


31/05/09
117
Calgary, AB
Доброго времени,

продолжаю читать Вирта, глава 1.10 "представление типов"
возник такой вопрос : почему смещения компонент записей могут вычисляться на этапе трансляции, а смещения компонент массивов нет? В чем принципиальное отличие записей и массивов?

отрывок из книги

Изображение

 Профиль  
                  
 
 Re: Принципиальное отличие в представлении массивов и записей?
Сообщение06.06.2009, 20:04 
Заслуженный участник
Аватара пользователя


03/06/09
1497
GrishinUS в сообщении #220133 писал(а):
почему смещения компонент записей могут вычисляться на этапе трансляции, а смещения компонент массивов нет?

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

 Профиль  
                  
 
 Re: Принципиальное отличие в представлении массивов и записей?
Сообщение07.06.2009, 13:39 
Аватара пользователя


31/05/09
117
Calgary, AB
Спасибо за ответ,

размер компоненты массива тоже известен компилятору, разве нет?
мы неявно определяем его с помощью указания типа, например
Код:
type arr01 = array [1..10] of word;

это означает что на массив arr01 отводится 20 байт (2 байта * 10 элементов).

По-моему, для упаковки достаточно знать всего две вещи :
1) размер машинного слова
2) размер компоненты массива/записи
поэтому мне не совсем понятно для чего Вы упомянули номер элемента массива.

Если неправ, поправьте.

 Профиль  
                  
 
 Re: Принципиальное отличие в представлении массивов и записей?
Сообщение07.06.2009, 13:47 
Заслуженный участник


11/05/08
32166
GrishinUS в сообщении #220307 писал(а):
размер компоненты массива тоже известен компилятору, разве нет?

Он-то известен, конечно. Но означает это лишь то, что доступ к элементам обычного массива и к элементам массива записей осуществляется одинаково эффективно. Тут нет разницы, из чего составлен массив.

Но есть принципиальная разница между массивом (неважно какого типа) и отдельной записью как таковой. В первом случае адрес поля может быть вычислен только уже на этапе выполнения, и никак иначе, во втором -- ещё на этапе компиляции.

Хотя есть и "ньюанс". Если Вы напишете что-нибудь типа $a[i]$ -- компилятор будет вынужден подсчитывать адрес оперативно. Ежели ж типа $a[17]$ -- грамотный компилятор подставит в поле смещения константу.

 Профиль  
                  
 
 Re: Принципиальное отличие в представлении массивов и записей?
Сообщение07.06.2009, 14:12 
Аватара пользователя


31/05/09
117
Calgary, AB
Теперь понятно,
большое спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group