powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Virtual method + Exceptions in C++
8 сообщений из 83, страница 4 из 4
Virtual method + Exceptions in C++
    #39649580
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenКак там среда себя не вела - вызван будет метод ребенкаКогда ломают копья за (не)виртуальность, то под стягом эффективности распинают накладные расходы виртуального вызова.
В ситуации, когда среда исполнения девиртуализировала вызов метода и даже встроила тело метода по месту использования - пофигу, что там в байт-коде.
Результат исполнения будет одинаков, а скорость будет достигнута без дополнительных усилий со стороны программиста.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649622
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsemen.s.semenКак там среда себя не вела - вызван будет метод ребенкаКогда ломают копья за (не)виртуальность, то под стягом эффективности распинают накладные расходы виртуального вызова.
В ситуации, когда среда исполнения девиртуализировала вызов метода и даже встроила тело метода по месту использования - пофигу, что там в байт-коде.
Результат исполнения будет одинаков, а скорость будет достигнута без дополнительных усилий со стороны программиста.
Вот бы в Яве на девиртуализации метода поэкономить =) :lol:
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649651
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то ощущение, когда пришёл попросить научить плюсам, а в результате всех посадил на яву :)
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649746
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyinvokevirtual для вызова final метода, который якобы невиртуальный.
Чудеса ))

Видите, даже в Java есть виртуальные методы!
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649751
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsemen.s.semenВ любом случае это будет поведение виртуального методаСреда исполнения может и девиртуализировать и встроить вызов финального метода.
Это предусмотрено уже в JLS.

Может. Она всё может. Даже заинлайнить может.
Это сделает метод НЕвиртуальным ? Нет.
В Java ВСЕ вызовы нестатических методов делаются на основании динамического
типа объекта, с которым он вызывается.
Т.е. ВСЕ нестатические методы классов "виртуальные", хотя даже понятия такого у них в языке нет.

P.S. пример с final я не понял. Я уверен, что вызовется final метод из B, из наследника, поскольку final запрещает переопределять данный метод ниже по иерархии, но в предке этот метод остаётся таким же "виртуальным", как и был.
Вот если бы в A, в предке он был final, то можно было бы ожидать невиртуального вызова (отсутствия диспетчеризации по динамическому типу объекта)
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649819
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМожет. Она всё может. Даже заинлайнить может.
Это сделает метод НЕвиртуальным ? Нет.Если, таки читать спецификацию, то там указано, что "компилятор или среда выполнения".
По байт-коду, тем не менее, видно, что компилятор ставит invokevirtual. Причина этого проста.
Для среды с динамической компоновкой по требованию невозможно статически доказать, что девиртуализация и встраивание допустимы во всех сценариях исполнения.
Таким образом, компилятор просто не выделывается, пытаясь доказать недоказуемое.

Представим, что некто, обладающий достаточной степенью квалификации и упорства, сгенерирует корректный байт-код, в котором будет invokespecial с лямбдой или что-нибудь этакое.
Метод перестанет быть виртуальным?

P.S. Насколько я знаю, для плюсов тоже может быть аналогичная оптимизация.
Считать оптимизируемые таким образом методы виртуальными по факту объявления и присутствию в таблице виртуальных методов или невиртуальными по способу фактического вызова?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649977
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovP.S. Насколько я знаю, для плюсов тоже может быть аналогичная оптимизация.
Считать оптимизируемые таким образом методы виртуальными по факту объявления и присутствию в таблице виртуальных методов или невиртуальными по способу фактического вызова?Если мне не изменяет память, декомпозиция в "плюсах" используется на -O3.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39650052
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПредставим, что некто, обладающий достаточной степенью квалификации и упорства, сгенерирует корректный байт-код, в котором будет invokespecial с лямбдой или что-нибудь этакое.
Метод перестанет быть виртуальным?


Нет, не перестанет.
Но ты уже по-моему вошёл в азарт доказательсва всем обратного, так что не буду спорить с тобой.
...
Рейтинг: 0 / 0
8 сообщений из 83, страница 4 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Virtual method + Exceptions in C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]