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

Что быстрее: typeid + static_cast + колл метода или виртуальный

колл метода? Нагуглить именно такой кейс не смог(

8 ответов

2 просмотра

typeid точно так же сделает лукап vtable, так что я бы не ждал особой разницы. ps: эксперимент никогда не лишний.

Konstantin- Автор вопроса
Max
typeid точно так же сделает лукап vtable, так что ...

Да, но при vcall мы сразу берем нужную функцию из vtable по ее имени в качестве индекса, а при typeid мы должны еще сначала сравнить классы, чтобы войти в нужный свич, потом сделать static_cast поинтеров, хотя это копирование, примитива, а потом только вызовем нужную функцию по сдвигу. С другой стороны, тут все зависит от того, как именно устроена vtable и поиск по индексу в ней. Там же вряд ли O(1), ведь тогда бы пришлось хешировать имена функций. Так мб там линейный поиск O(n), в таком случае при огромных vtable у класса, способ с typeid должен быть быстрее

Dmitriy [Отпуск]
Зачем хешировать имена?

я бы даже спросил зачем там вообще оставлять имена

Konstantin- Автор вопроса
Dmitriy [Отпуск]
Зачем хешировать имена?

Да, согласен, стринги сравнивать все-таки в 99% дешевле, чем хеширования всякие делать

Konstantin
Да, согласен, стринги сравнивать все-таки в 99% де...

Ладно, следующий вопрос: зачем сравнивать строки?

Konstantin- Автор вопроса
Dmitriy [Отпуск]
Ладно, следующий вопрос: зачем сравнивать строки?

Там адреса лежат? Мне изначально на уровне абстракций размышлять легче. Ладно, вопрос закрыт)

Konstantin
Там адреса лежат? Мне изначально на уровне абстрак...

Там лежит буквально таблица с доступом по индексу

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

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

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
16
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
6
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
Карта сайта