170 похожих чатов

Есть ли оверхед на файнал виртуальные функции?

24 ответов

9 просмотров

Любые виртуальные функции же добавляют vtable, полагаю оверхед стандартный

Это, так сказать, negative overhead abstraction. У компилятора большее возможностей для девиртуализации вызова такой функции, а значит, у неё даже меньший оверхед в сравнении с обычной виртуальной функцией

Нет, это в compile time только

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Нет, это в compile time только

То есть оверхед в компайл тайме только ?

Ofee Oficsu
Это, так сказать, negative overhead abstraction. У...

Ну как бы всё правильно ответил, кроме слова "Да", которое должно быть "Нет".

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Ну да

А можно тогда сдаункастить базовый класс к дериваду и дальше без оверхеда дергать уже его файнал функции получается? Или есть способ лучше для подобного сценария

Aleksei Budyakov
А можно тогда сдаункастить базовый класс к деривад...

А что ты так паришься, там оверхед даже если есть, он минимальный, вместо прямого вызова функции косвенный вызов через адрес в памяти. На , скажем, 10 тактов медленнее. Причём, сам вызов функции, организация передачи параметров и передача управления коду по новому адресу, и затем возврат из функции и переход по обратному адресу, обладает ТОЧНО гораздо большим оверхедом, чем сам этот несчастный call...

Aleksei Budyakov
А можно тогда сдаункастить базовый класс к деривад...

Вообще, это возможно, но отсутствие оверхеда не гарантируется языком.

И я не понял, оверхед чего ты просишь — виртуальной функции или её финализации ?

Ilya Zviagin
Ну как бы всё правильно ответил, кроме слова "Да",...

Так оверхед – он отрицательный, поэтому нельзя сказать, что его вообще нет)

Ilya Zviagin
Ну просто непонятно ты написал...

Подправил сообщение, чтобы никого не сбивать с толку больше

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
А что ты так паришься, там оверхед даже если есть,...

Тогда большая из проблем это то что их заинлайнить сложнее?

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
И я не понял, оверхед чего ты просишь — виртуально...

хотел понять сравнение обычной виртуальной и финализированной

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
В рантайме - ноль разницы

Понятно. А может финализированные лучше инлайнятся?

Aleksei Budyakov
Понятно. А может финализированные лучше инлайнятся...

Если компилятор знает, что рантайм-тип объекта такой-то, то виртуальные функции (все вызовы) могут быть заинлайнены. Если не знает - то нет. Причём, это должно быть в пределах одного бинарного модуля, вызов сквозь границы динамических библиотек не сработает с инлайнингом. final тут ничем не поможет, но и не помешает.

Aleksei-Budyakov Автор вопроса
Ilya Zviagin
Если компилятор знает, что рантайм-тип объекта так...

То есть статически слинкованные библиотеки быстрее работают?

Aleksei-Budyakov Автор вопроса

Понятно. Спасибо

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Если подытожить: По мнению Розыча и Хемуля и др. - предпочтительно по возможности объявлять в секции имплементации потому-что: 1) Выше скорость компиляции 2) Не замусоривается...
notme
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта