Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> статическое и динамическое связывание, имеет ли смысл при современных скоростях 
:(
    Опции темы
Gunslinger
Дата 12.8.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(Partizan @  12.8.2008,  09:10 Найти цитируемый пост)
компилятор только компилирует....никакой памяти он "до выполнения, при компиляции" не выделяет...

а преобразовать имя переменной к адресу ячейки в памяти?


Цитата(Partizan @  12.8.2008,  09:10 Найти цитируемый пост)
Вам думаете, что int x; - это позднее связывание? 

да. в терминологии с++ - автоматическое.
PM MAIL   Вверх
Partizan
Дата 12.8.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



Цитата(Gunslinger @ 12.8.2008,  09:40)
Цитата(Partizan @  12.8.2008,  09:10 Найти цитируемый пост)
Вам думаете, что int x; - это позднее связывание? 

да. в терминологии с++ - автоматическое.

эээ...автоматическое? к сожалению не знаю такого термина....
что по-вашему при объявлении переменной int x с чем связывается?

Добавлено через 5 минут и 52 секунды
а вообще по хорошему автору надо курить полиморфизм...тогда не будет таких вопросов...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mes
Дата 12.8.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  12.8.2008,  08:55 Найти цитируемый пост)
1. тип же всегда известен, в с++ только так переменные и объявляются. Или может быть иначе? 
2. Как тип переменной может быть изменен в процессе выполнения? Имеется ввиду преведение типов?
3. Под статическим связыванием типов я понимаю следующее: int y=2; - тип известен, компилятор выделяет под него память размером int (до выполнения, при компиляции). значение тоже известно - компилятор записывает его в ячейку int y.
4. Создает ли компилятор доп инфу, как в случае с виртуальными функциями для объявленных переменных, но не инициализированных?     int x; или int *p=new int[];

1. 
Цитата(Gunslinger @  11.8.2008,  10:56 Найти цитируемый пост)
 "Основные концепции языков программирования", 4ю главу, где Страуструп 

А вы не обратиле внимание , что в этой книжке не только о с++ пишется.
 также непонятно где Вы там Страуструпа нашли 
Примером динамического связывания  в с++ является (реализованый разными стороними библиотеками)  тип Variant. 
2. Не в c++ делается примерно так: a=3; (сейчас у а тип инт) а = "строка"; (теперь тип строка)  
разновидностей и подходов много и зависит от реализации конкретного языка
3. пямять выделяется не под тип, а под переменную.
4. Как связан тип с инициализацией ? вот ограниченный пример динамического связывания
Код

TBase *p;  // указатель типа TBase
p = new TDerived(); // указывает на TDerived (наследник TBase) 
p->virt_func(); // вызов реализации функции класса TDerived 
func (p); // не смотря на то что указатель связан с классом TDerived, произойдет вызов перегруженной функции для класса TBase.
// в языках с динамическим связыванием вызвалась бы перегруженая для TDerived функция




--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 12.8.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(Partizan @  12.8.2008,  09:52 Найти цитируемый пост)
эээ...автоматическое? к сожалению не знаю такого термина....

в той книге написано, что кроме динамического связывания есть еще и автоматическое, а в с++ int x=2 - автоматическое. просто щас каша в голове, хотел как-то разграничить. 


Цитата(Partizan @  12.8.2008,  09:52 Найти цитируемый пост)
а вообще по хорошему автору надо курить полиморфизм...тогда не будет таких вопросов... 

я бы покурил, только инфы на википедии мне не достаточно, а из книг я изучал с++ только по Уолтеру Савичу, там полиморфизм функций описан. Я так думаю, термин "связывание типов" - это описание какого-то процесса на уровне железа и двоичного кода. Только никак не могу понять какого.

Цитата(Partizan @  12.8.2008,  09:52 Найти цитируемый пост)
что по-вашему при объявлении переменной int x с чем связывается?

с физическим адресом ячейки памяти.


Цитата(mes @  12.8.2008,  10:37 Найти цитируемый пост)
А вы не обратиле внимание , что в этой книжке не только о с++ пишется.
 также непонятно где Вы там Страуструпа нашли

обратил, но интересуюсь только с++. Про Страуструпа было в начале, вот и решил, что эту главу написал он.


Цитата(mes @  12.8.2008,  10:37 Найти цитируемый пост)
Не в c++ делается примерно так: a=3; (сейчас у а тип инт) а = "строка"; (теперь тип строка)

я что-то пропустил? когда стали писать как в питоне?
PM MAIL   Вверх
cutwater
Дата 12.8.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 1
Всего: 10



Цитата(Partizan @  12.8.2008,  09:52 Найти цитируемый пост)
а вообще по хорошему автору надо курить полиморфизм...тогда не будет таких вопросов... 


Я об этом уже говорил. Просто автор не понимает о чем пишет, почитайте Шилдта или Страуструпа. Там очень хорошо описаны полиморфизм и связывание.
Автору так же смотреть мой пример выше.


--------------------
user posted image
PM MAIL   Вверх
mes
Дата 12.8.2008, 18:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  12.8.2008,  11:30 Найти цитируемый пост)
Не в c++ делается примерно так: a=3; (сейчас у а тип инт) а = "строка"; (теперь тип строка)

я что-то пропустил? когда стали писать как в питоне? 

пропустили частицу "не" в начале цитаты.. ;)



Цитата(Gunslinger @  12.8.2008,  11:30 Найти цитируемый пост)
что по-вашему при объявлении переменной int x с чем связывается?
с физическим адресом ячейки памяти.

Код

union { int i; float  f; };

в данном примере i и f занимают одну и туже физическую ячейку памяти (делает это структура union) , однако тип у обоих переменных разных .  Тип  - это проявление взаимодействия со значением. Некая сущность, которая определяет какие виды взаимодействия и каким образом подерживаются.  





--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 13.8.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(mes @  12.8.2008,  18:49 Найти цитируемый пост)
Тип  - это проявление взаимодействия со значением. Некая сущность, которая определяет какие виды взаимодействия и каким образом подерживаются.

т.е. должны быть проверки для того, чтобы это определить?

Добавлено через 4 минуты и 14 секунд
в смысле проверки - работа компилятора.
PM MAIL   Вверх
mes
Дата 14.8.2008, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Gunslinger @  13.8.2008,  20:22 Найти цитируемый пост)
т.е. должны быть проверки для того, чтобы это определить?

точнее сказать не проверка, а выбор функции.
Т.е вид взаимодействия с ячейкой (оно и есть выбор подходяшей реализации функции) осушествляется на основе типа значения.

Например у нас есть функция print(). Для работы с разными типами мы перегружаем ее :
Код

void print (int i) {..}
void print (char c) {..}
void print (char * pc) {..}
void print ...
// в компиляторе оно формитуется в условный код :
void print <int>      (addr) {..}
void print <char>  (addr) {..}
void print <pchar>(addr) {..}
void print ...
// где в <> указан тип функции , а addr - адрес ячейки , естественно все тело функции заменяется подобным способом.
// и получается что после компиляторное представление программы работает уже без знания типа значения
// т.е имеем например такие вызовы функции

int i=7;
print(i); 
print(5); 
print ("a");
print (´a´);
print ((int)'a');

// что преобразуется в подобный код:
print<int>(addr12); 
print<int>(5); 
print <pchar>(addr20);
print <char>(97);
print<int>(97); 

// где addr12 и addr20 адреса переменной i и строки "a"';



Добавлено через 1 минуту и 30 секунд
в языках с динамическим типом переменых, выбор подходяшей функции (вышеразобранная ситуация)  происходит не во время компиляции,а во время выполнения. 


--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 15.8.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Цитата(mes @  14.8.2008,  14:10 Найти цитируемый пост)
Например у нас есть функция print(). Для работы с разными типами мы перегружаем ее

меня интересовало связывание на уровне компилятора, а полиморфизм я считал только логической штукой для удобства программирования. так вот при чем здесь полиморфизм.
PM MAIL   Вверх
Partizan
Дата 15.8.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



Цитата(Gunslinger @ 15.8.2008,  15:25)
Цитата(mes @  14.8.2008,  14:10 Найти цитируемый пост)
Например у нас есть функция print(). Для работы с разными типами мы перегружаем ее

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

Gunslinger, полиморфизм как он есть возможен как раз благодаря позднему связыванию.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mes
Дата 16.8.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Partizan @  15.8.2008,  16:58 Найти цитируемый пост)
полиморфизм как он есть возможен как раз благодаря позднему связыванию. 

обычно под словом "позднее связывaние" подразумевает связывание в режиме выполнения...
 полиморфизм бывает статический и динамический. Динамический выполняется в рантайм, а статический на этапе компиляции(т.е на при раннем связывании)

Добавлено через 1 минуту и 52 секунды
Цитата(Gunslinger @  15.8.2008,  15:25 Найти цитируемый пост)
меня интересовало связывание на уровне компилятора, а полиморфизм я считал только логической штукой для удобства программирования. так вот при чем здесь полиморфизм. 

полиморфизм эта одна одно из проявлений связывания типов. 


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.