Re[10]: Q&A: lvalue и rvalue
От: Шахтер Интернет  
Дата: 13.01.04 21:01
Оценка: +1
Здравствуйте, Рома Мик, Вы писали:

РМ>Здравствуйте, Шахтер, Вы писали:


Ш>>Когда класс vector возвращает тебе ссылку на затребованный объект, он что возвращает "сущность времени компиляции"? Я не думаю, что во время компиляции можно вычислить адрес этого объекта.

РМ>Фактически неизвестно насколько извращенным может оказаться результат в результате встраивания ( inline ) и оптимизации.

РМ>Рассмотрим только что придуманный мной пример, когда вектор точно знает на этапе компиляции адрес буфера, что в приницпе можно себе представить: если все данные из памяти для доступа мапятся на опреденный виртуальный адрес, например.


То, что в результате оптимизации в подходящих ситуациях компилятор может очень многое выбросить из кода и из памяти, я думаю, совершенно понятно. Вопрос в другом. "Сущность времени компиляции" должна гарантирована быть вычисляема во время компиляции. Для ссылок таких гарантий, естественно, дать невозможно.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[11]: Q&A: lvalue и rvalue
От: Рома Мик Россия http://romamik.com
Дата: 13.01.04 21:48
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>То, что в результате оптимизации в подходящих ситуациях компилятор может очень многое выбросить из кода и из памяти, я думаю, совершенно понятно.

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

Ш>"Сущность времени компиляции" должна гарантирована быть вычисляема во время компиляции.

А это я неверно использую термины Имелось ввиду, что понятие ссылка существует только на этапе компиляции, в отличие от объекта, который наоборот существует только на этапе выполнения, а на этапе компиляции существует мнение, что объекту — быть ( но этапе выполнения ).
... << RSDN@Home 1.1.2 beta 2 >>
Re[12]: Q&A: lvalue и rvalue
От: Шахтер Интернет  
Дата: 13.01.04 22:05
Оценка: +1
Здравствуйте, Рома Мик, Вы писали:

РМ>А это я неверно использую термины Имелось ввиду, что понятие ссылка существует только на этапе компиляции, в отличие от объекта, который наоборот существует только на этапе выполнения, а на этапе компиляции существует мнение, что объекту — быть ( но этапе выполнения ).


Ну, вообще-то на этапе выполнения ничего, кроме сигналов на линиях нет. 0,1,фронт. Между прочим, разглядывая сигналы на ножках процессора на экране осцилографа или логического анализатора, начинаешь задумываться о сущности бытия. Все эти объекты, ссылки и прочее на самом деле суть абстрактные понятия, существующие только в голове. Их даже в тексте программы нет. Это мы, читая текст придаём ему смысл. (с) Ещё один Copyright (c) мой.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[13]: Q&A: lvalue и rvalue
От: Рома Мик Россия http://romamik.com
Дата: 13.01.04 22:18
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Ну, вообще-то на этапе выполнения ничего, кроме сигналов на линиях нет. 0,1,фронт. Между прочим, разглядывая сигналы на ножках процессора на экране осцилографа или логического анализатора, начинаешь задумываться о сущности бытия. Все эти объекты, ссылки и прочее на самом деле суть абстрактные понятия, существующие только в голове. Их даже в тексте программы нет. Это мы, читая текст придаём ему смысл. (с) Ещё один Copyright (c) мой.

Оно конечно да, несомненно. Но указанные сигналы можно как-то интерпретировать. Так вот, объективно существует память, последоватльность битов. И любому объекту в этой памяти соответсвует группа битов. Хотя это соответствие, конечно, чисто умозрительное на этапе выполнения, но оно есть. А ссылке уже ничего не соответствует. И наоброт, во время компиляции ссылке соответсвует нечто более реальное, чем объекту, которому соответствует только знание, что на этапе выполнеия он будет.
... << RSDN@Home 1.1.2 beta 2 >>
Re[14]: Q&A: lvalue и rvalue
От: Шахтер Интернет  
Дата: 13.01.04 23:02
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Здравствуйте, Шахтер, Вы писали:


Ш>>Ну, вообще-то на этапе выполнения ничего, кроме сигналов на линиях нет. 0,1,фронт. Между прочим, разглядывая сигналы на ножках процессора на экране осцилографа или логического анализатора, начинаешь задумываться о сущности бытия. Все эти объекты, ссылки и прочее на самом деле суть абстрактные понятия, существующие только в голове. Их даже в тексте программы нет. Это мы, читая текст придаём ему смысл. (с) Ещё один Copyright (c) мой.

РМ>Оно конечно да, несомненно. Но указанные сигналы можно как-то интерпретировать. Так вот, объективно существует память, последоватльность битов. И любому объекту в этой памяти соответсвует группа битов. Хотя это соответствие, конечно, чисто умозрительное на этапе выполнения, но оно есть. А ссылке уже ничего не соответствует. И наоброт, во время компиляции ссылке соответсвует нечто более реальное, чем объекту, которому соответствует только знание, что на этапе выполнеия он будет.

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

Самоцитирование. Простейший примерчик.

inline void swap(int &a,int &b)
 {
  int temp=a;
  
  a=b;
  
  b=temp;
 }


PUBLIC    ?swap@@YAXAAH0@Z                ; swap
; Function compile flags: /Ogty
; File c:\ss_root\c++\projects\test\main.cpp
;    COMDAT ?swap@@YAXAAH0@Z
_TEXT    SEGMENT
_a$ = 8                            ; size = 4
_b$ = 12                        ; size = 4
?swap@@YAXAAH0@Z PROC NEAR                ; swap, COMDAT

; 10   :   int temp=a;
; 11   :   
; 12   :   a=b;

    mov    edx, DWORD PTR _b$[esp-4] // вот здесь лежит ссылка b
    mov    eax, DWORD PTR _a$[esp-4] // а вот ссылка a
    mov    ecx, DWORD PTR [eax]      // вот мы загрузили в регистр значение целой переменной, на которую ссылалась ссылка a
    push    esi
    mov    esi, DWORD PTR [edx]
    mov    DWORD PTR [eax], esi

; 13   :   
; 14   :   b=temp;

    mov    DWORD PTR [edx], ecx
    pop    esi

; 15   :  }

    ret    0
?swap@@YAXAAH0@Z ENDP                    ; swap
_TEXT    ENDS
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[15]: Q&A: lvalue и rvalue
От: Рома Мик Россия http://romamik.com
Дата: 14.01.04 09:17
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Ну почему же не соответствует-то? Точно так же, есть место в стеке или в статической памяти, где лежит значение этой ссылки -- на самом деле просто машинный адрес объекта, на который эта ссылка ссылается.

Да не обязательно. О чем я и толкую. Как будет реализована ссылка и будет ли указатель зависит от компилятора. Для
int a;
int &i = a;

очень легко может не быть никакого указателя. А если он и будет, то это детали реализации. Форсировать создание объекта a ты можешь получив его адрес, он обязан адрес иметь, а со ссылкой такого сделать нельзя, так как адрес объекта ссылки ( а не объекта, на который она ссылается ) получить нельзя, так как его нету.
... << RSDN@Home 1.1.2 beta 2 >>
Re[10]: Q&A: lvalue и rvalue
От: Павел Кузнецов  
Дата: 14.01.04 10:16
Оценка:
Здравствуйте, Рома, Вы писали:

РМ> Например, может вообще не быть никакой области памяти, соответсвующей

РМ> ссылке. С большой вероятностью так и будет для такого кода:
РМ>
 РМ> int i;
 РМ> int &a = i;
 РМ>


При включенной оптимизации с вероятностью 99% для переменной i в следующем
примере также не будет зарезервировано никакой области памяти:
int f()
{
  int i = 10;
  return i;
}

тем не менее, i обозначает объект типа int.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[11]: Q&A: lvalue и rvalue
От: Рома Мик Россия http://romamik.com
Дата: 14.01.04 10:48
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>тем не менее, i обозначает объект типа int.

Но можно получить адрес i и тогда объект i обязательно будет. А невстроенный объект ( которые не совсем такие, как все остальные ) будет обязательно всегда. Форсировать создание ссылки ты никак не можешь, поскольку не предлагается никакой возможности получить адрес объекта ссылки, поскольку такого объекта не предполагается.
... << RSDN@Home 1.1.2 beta 2 >>
Re[12]: Q&A: lvalue и rvalue
От: Павел Кузнецов  
Дата: 14.01.04 11:15
Оценка:
Здравствуйте, Рома, Вы писали:

ПК>> тем не менее, i обозначает объект типа int.


РМ> Но можно получить адрес i


Вот это и является основным моментом, а не фактическое использование/не
использование памяти для переменной.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[12]: Q&A: lvalue и rvalue
От: Шахтер Интернет  
Дата: 14.01.04 19:15
Оценка:
Здравствуйте, Рома Мик, Вы писали:

РМ>Здравствуйте, Павел Кузнецов, Вы писали:


ПК>>тем не менее, i обозначает объект типа int.

РМ>Но можно получить адрес i и тогда объект i обязательно будет. А невстроенный объект ( которые не совсем такие, как все остальные ) будет обязательно всегда.

Тоже не всегда.

РМ>Форсировать создание ссылки ты никак не можешь, поскольку не предлагается никакой возможности получить адрес объекта ссылки, поскольку такого объекта не предполагается.


Конец предложения неверен. Он как раз предполагается, пусть это с точки зрения программиста и "неполноценный объект", просто компилятор может, если сможет, его элиминировать, точно так же, как и объект любого другого типа.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[5]: Q&A: lvalue и rvalue
От: is  
Дата: 15.01.04 15:02
Оценка: 1 (1)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>[...] identity (забыл как это по-русски).


Идентичьность (identity) объекта
Автор: Ватакуси
Дата: 30.12.03


Re[5]: Вопросы на собеседовании
Автор: Alexey Shirshov
Дата: 01.12.03
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction. -- Albert Einstein
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.