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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> физич. смысл указателей и ссылкок, в чем заключается физический смысл ссылк 
:(
    Опции темы
mes
Дата 26.12.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(MAKCim @  26.12.2008,  12:19 Найти цитируемый пост)
точнее разница лишь в том, в какой момент времени мы получим бинарный код: в процессе компиляции или в процссе выполнения


MAKCim, позвольте узнать, когда  Вы проигрываете ход программы в голове (допустим нет дебагера под рукой), получаемый  "объектный код" близок к асмовскому?
т.е в представлении Вы оперируете больше асмовскими понятиями (в случаях когда речь идет типа : об объектах, ссылках и указателях) ?

Это сообщение отредактировал(а) mes - 26.12.2008, 13:29


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



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



тру программисты должны ассемблировать программу и эмулировать ее выполнение в уме
дизассемблировать и трассировать тоже в уме
PM MAIL ICQ   Вверх
mes
Дата 26.12.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GoldFinch @  26.12.2008,  14:49 Найти цитируемый пост)
тру программисты должны ассемблировать программу и эмулировать ее выполнение в уме
дизассемблировать и трассировать тоже в уме 

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

Добавлено @ 15:06
Цитата(UnrealMan @  26.12.2008,  15:00 Найти цитируемый пост)
Нет, не валидна - временный объект уничтожается сразу после отрабатывания

тогда ИМХО тут желательно подправить :
Цитата(UnrealMan @  25.12.2008,  21:51 Найти цитируемый пост)
Код

const int &ref = 1;

ref ссылается на временный объект типа const int со значением 1. Время жизни этого временного объекта то же, что и у данной ссылки.

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

Добавлено @ 15:09
Цитата(SABROG @  26.12.2008,  10:13 Найти цитируемый пост)
И будут содержать вообще не адрес,

Адрес не обязан быть реальным адресом в памяти.. Адрес это идентификатор в виртуальном адресном пространстве, а реализации которого фактически знает только компилятор.
а разный размер ?? никто же не удивляется что адреса far и near были разного размера  )) 


Это сообщение отредактировал(а) mes - 26.12.2008, 15:13


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


Опытный
**


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

Репутация: 5
Всего: 32



Цитата(mes @  26.12.2008,  15:01 Найти цитируемый пост)
так как одинаковое  время жизни объекта и ссылки "случайное" совпадение

В том конкретном случае это не случайное совпадение.
PM MAIL   Вверх
SABROG
Дата 26.12.2008, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



Цитата(mes @  26.12.2008,  15:01 Найти цитируемый пост)
а разный размер ?? никто же не усивляется что адреса far и near были разного размера  )) 


В том то и подвох. По идее компилятор может вообще указатель сделать в виде файла размером в сотню гигабайт или в виде IP адреса. Т.е. обратившись к указателю компилер лезет к некоему объекту, реальное расположение которого известно только ему одному, также как и способ получения данных из указателя.

В общем я думаю, что правильным ответом на вопрос топикстартера будет нечто вроде: "Физический смысл указателя и ссылки известен только разработчикам конкретного компилятора. И не исключено, что физического смысла может не быть вообще как такового. Однако на момент 26 декабря 2008 года в наиболее распространенных компиляторах C++ физические смыслы указателей и ссылок такие-то. Разница в реализацииях на разных платформах и компиляторах такая-то."

 smile 


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
UnrealMan
Дата 26.12.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 32



Цитата(SABROG @  26.12.2008,  15:26 Найти цитируемый пост)
Т.е. обратившись к указателю компилер лезет к некоему объекту, реальное расположение которого известно только ему одному, также как и способ получения данных из указателя.

Компилятор всего лишь преобразует текст программы на языке высокого уровня в низкоуровневый код, "понятный" среде выполнения. Непосредственное размещение данных в т.н. физической памяти не является областью действия компилятора. Скомпилированная программа может быть вообще никогда не запущена на выполнение smile

Физический смысл указателей и ссылок - бессмысленная ерундистика. Чем гадать, что это могло бы означать, лучше потребовать у автора понятый вопрос, на который можно дать чёткий ответ.

Это сообщение отредактировал(а) UnrealMan - 26.12.2008, 15:55
PM MAIL   Вверх
SABROG
Дата 26.12.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



Цитата(UnrealMan @  26.12.2008,  15:47 Найти цитируемый пост)
Компилятор всего лишь преобразует текст программы на языке высокого уровня в низкоуровневый код, "понятный" среде выполнения. Непосредственное размещение данных в т.н. физической памяти не является областью действия компилятора. Скомпилированная программа может быть вообще никогда не запущена на выполнение smile


Технологии не стоят на месте, что если в будущем на языке C++ можно будет писать программы для целых кластеров и облачных вычислений. Где данные будут разбросаны по всему миру и участки кода точно также будут выполняться на разных машинах. Однако для программиста будет все прозрачно.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 26.12.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(UnrealMan @  26.12.2008,  15:26 Найти цитируемый пост)
В том конкретном случае это не случайное совпадение. 

слово "случайно" специально взято в кавычки - чтоб подчеркнуть что длины жизни временного объекта и ссылки не зависят друг от друга.
И то что концы их жизни совпадают, зависит всего лишь от того, что они живут в одном и том же жизненном блоке, вместе с которым и умрут.



Это сообщение отредактировал(а) mes - 26.12.2008, 16:52


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


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

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



Ни у кого случаем нет примера как как из указателя на функцию-член класса получить:
1. Адрес  объекта
2. Настоящий адрес метода (метод не статик, но компилятор не дурак, чтобы копировать код метода для каждого объекта, по сути код метода  единый для всех).


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 26.12.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(SABROG @  26.12.2008,  20:20 Найти цитируемый пост)
Ни у кого случаем нет примера как как из указателя на функцию-член класса получить:
1. Адрес  объекта
2. Настоящий адрес метода (метод не статик, но компилятор не дурак, чтобы копировать код метода для каждого объекта, по сути код метода  единый для всех). 


1. Указатель не хранит адрес объекта, поэтому при вызове метода, обязательно указывать объект для которого идет вызов
2. Зависит от компилятора и типа метода. (то что в скобках в цитате не понял)

вот пример для вызова метода как обычной функции:
Код

 // Только для демонстрации !!!
//  MinGw 3.4.2 
 
struct A
{
    A (int _i)  : i(_i) {  }
    void f() { std::cout << ++i << std::endl; };
    int i;
};
typedef void (A::*A_mtd)();
typedef void (*Fn)(A *a);

int main()
{
// начало грязного хака
// работает не для всех типов методов
// и зависим от реализации компилятора.

 union
 {
   Fn fn;
   A_mtd mtd;
 } u;

 u.mtd = &A::f;
 Fn fn = u.fn;   
// конец грязного хака

 A a(5);

 a.f();  // 6
 fn(&a); // 7
 a.f();  // 8
 fn(&a); // 9

  system ("pause");
  return(0);
}






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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Модератор: особо флеймовая часть темы перенесена сюда


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 29.12.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(GoldFinch @ 22.12.2008,  09:25)
а инструкцию xor eax,eax тогда надо записывать как mov eax,0 ага?
видимо вы не знаете что такое язык ассемблера, потому и пишете такую ересь
какбэ ЯА нужен в частности для записи опкодов в виде мнемоник и наоборот, поэтому есть опкод 8D и мы его записываем как LEA и никак иначе

Я прекрасно знаю, что такое язык Ассемблера - с 2001 года это основной источник моего дохода.
Мне вот не очень понятно, почему jmp может быть в нескольких вариантах (абсолютный и относительный), а загрузка в регистр должна иметь несколько названий в зависимости от набора параметров? На мой взгляд, как раз jmp должен иметь каждый свое имя (ну если мне позарез нужен относительный в данном месте, а абсолютный не приемлим!).
В этом плане мне больше нравится подход создателей процессора Z80. Там все команды загрузки называются LD (от load) - в независимости от машинного кода (коды от 1 [например: LD A,B] до 4 байт [например: LD (IX+4),5]), а переходы называются JR (относительный - Jump Relative) и JP (абсолютный - JumP), условия перехода задаются с помощью первого параметра, поэтому не надо в памяти держать миллион мнемоник как в x86 (JA, JAE, JB, JBE, JC, JCXZ, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNC, JNE, JNG, JNGE, JNL, JNLE, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ), а достаточно знать ряд базовых условий (Z, C, NZ, NC, PO, PE, M, P).



PM   Вверх
GoldFinch
Дата 29.12.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



bsa, может я действительно не разбираюсь в асме, но в нем нету варианта jmp с переходом по абсолютному смещению
есть jmp rel8, jmp rel32(16), jmp r/m32(16), но jmp imm32(16) нету
есть правда jmpf ptr16:32(16) но его нельзя сравнивать с jmp rel32

я рад за Z80, кроме него есть еще много МП и МК, есть еще и виртуальные машины, но применительно к IA-32, lea это lea, а mov это mov
PM MAIL ICQ   Вверх
bsa
Дата 29.12.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(GoldFinch @ 29.12.2008,  19:32)
bsa, может я действительно не разбираюсь в асме, но в нем нету варианта jmp с переходом по абсолютному смещению
есть jmp rel8, jmp rel32(16), jmp r/m32(16), но jmp imm32(16) нету
есть правда jmpf ptr16:32(16) но его нельзя сравнивать с jmp rel32
Цитата из документации, стр. 3-333:
Код
EB cb    JMP    rel8        Jump short, relative, displacement relative to next instruction
E9 cw    JMP    rel16       Jump near, relative, displacement relative to next instruction
E9 cd    JMP    rel32       Jump near, relative, displacement relative to next instruction
FF /4    JMP    r/m16       Jump near, absolute indirect, address given in r/m16
FF /4    JMP    r/m32       Jump near, absolute indirect, address given in r/m32
EA cd    JMP    ptr16:16    Jump far, absolute, address given in operand
EA cp    JMP    ptr16:32    Jump far, absolute, address given in operand
FF /5    JMP    m16:16      Jump far, absolute indirect, address given in m16:16
FF /5    JMP    m16:32      Jump far, absolute indirect, address given in m16:32
Кстати, хочу обратить внимание на разные машинные коды, соответствующие одной и той же мнемонике.

PM   Вверх
GoldFinch
Дата 29.12.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



bsa, я написал то же самое. Посмотрите любую другую инструкцию, в зависимости от адресации операндов у нее будут разные опкоды, есть много опкодов с мнемоникой MOV и много опкодов с мнемоникой LEA, однако LEA это LEA а MOV это MOV, поэтому LEA r32,[r32+r32] это не MOV r32, r32+r32
PM MAIL ICQ   Вверх
Страницы: (9) Все « Первая ... 5 6 [7] 8 9 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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