|
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 50
|
|
Дорого ли приведение указателей?14.11.2019, 18:19. Показов 7300. Ответов 55
Я не встретил эту тему в инете(именно про указатели, а не просто типы), но если она есть, дайте ссылку. На сколько дорога операция приведения указателя в стиле СИ? К примеру, есть два класса, один наследует другой. Дорого ли приведение указателя из указателя на родительский класс на указатель на дочерний? Я знаю, что указатель—это обычный int, который система принимает за адрес в памяти. Переменная, содержащая в себе указатель на объект представляет из себя int со значением вида 0x7f84a41000c0. Тогда, по идее, это не дорого для процессора. Я прав?
0
|
|
| 14.11.2019, 18:19 | |
|
Ответы с готовыми решениями:
55
Приведение указателей Приведение указателей приведение типов указателей |
|
фрилансер
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
|
|
| 21.11.2019, 12:21 | |
|
COKPOWEHEU, IGPIGP, зачем спорить. Можно же просто провести нагрузочный тест для обоих вариантов. И проверить, сколько времени займёт миллион таких вызовов
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 21.11.2019, 12:32 | ||
|
Виртуальность никогда не реализовывалась через RTTI и сама по себе виртуальность появилась исторически гораздо раньше, чем RTTI (разница в почти 13 лет).
2
|
||
|
Комп_Оратор)
|
|||
| 21.11.2019, 12:36 | |||
|
Можно попробовать. Но если не заставлять строки использовать придётся сравнивать два type_id? А указатель нужно лишь на на проверить. Вечером может поковыряю. А вам, как инициатору, предлагаю положить свою версию теста. ![]() Добавлено через 3 минуты То есть, вы полагаете, type_id и dynamic_cast реализованы по разному и type_id может быть быстрее? Спор об этом возник.
0
|
|||
|
фрилансер
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
|
|
| 21.11.2019, 12:44 | |
|
IGPIGP, я не знаю точно, как именно организовать тест, чтобы всякие там кеши процессора не повлияли. Вызовы в цикле без всяких заморочек подойдут? Или лучше пересоздавать объект на каждой итерации?
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 21.11.2019, 13:00 | |||
|
Во-первых я хотел бы сказать, что не любой typeid, также как и не любой dynamic_cast обязаны разрешаться на этапе исполнения. Если у компилятора есть вся необходимая информация, то runtime структуры с динамической информацией о типе даже не задействуются. Во-вторых в общем смысле type_id и dynamic_cast - это части RTTI. И тот и другой при условии динамического исполнения черпают информацию из одного источника - специальной структуры данных c динамической информацией о типе. Вот ссылка на то, как это делается в Itanium ABI (в Windows ABI примерно так же): https://itanium-cxx-abi.github... .html#rtti Оттуда: Как сравниваются два typeid:
https://itanium-cxx-abi.github... -algorithm Т.е. никакого сравнения строк нет, и нет даже поиска по хеш-таблице, как в более ранних реализациях.
2
|
|||
|
фрилансер
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
|
||||||
| 21.11.2019, 13:20 | ||||||
|
в общем, насчёт корректности теста не уверен, критикуйте
iters: 10000000 dynamic_cast: 1288 ms typeid : 1168 ms
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|
| 21.11.2019, 13:36 | |
|
Алексей1153, во-первых участие в замере динамической аллокации сводит на нет всю достоверность.
А что вы хотели этим тестом показать? Можете словами сформулировать?
0
|
|
|
фрилансер
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
|
|
| 21.11.2019, 13:41 | |
|
DrOffset, лично я - ничего не собирался показывать
https://www.cyberforum.ru/post14016822.html Но разница между двумя интервалами показывает, что выполняется быстрее, поскольку всё остальное в циклах одинаковое.
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||||||||
| 21.11.2019, 13:52 | |||||||||||||
|
Но это даже не важно здесь. Важнее понять что именно мы меряем. Вот у нас есть typeid. Что это? Это получение указателя на type_info из VTBL. Код с typeid условно такой:
Код с dynamic_cast условно такой:
1
|
|||||||||||||
|
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
|
||||||||||||
| 21.11.2019, 14:05 | ||||||||||||
Собственно, именно отсюда берется "лишний переход по указателю", о котором я говорил с самого начала.
1
|
||||||||||||
|
фрилансер
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
|
|
| 21.11.2019, 14:12 | |
|
DrOffset, про корректность теста я выше сразу написал - что я не уверен в ней.
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 21.11.2019, 14:14 | ||
|
Просто сначала я хотел чтобы вы сами к этому пришли. Если бы вы начали формулировать словами достаточно строго смысл ваших замеров, то сами столкнулись бы с противоречием.
0
|
||
|
фрилансер
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
|
||||||
| 21.11.2019, 14:26 | ||||||
|
DrOffset, ну так в итоге то что, получается, нужно оставить циклы вот в таком виде и запускать в релизе?
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 21.11.2019, 15:54 | ||
|
Сравнивать имеет смысл только эквивалентные по результату действия. Например два алгоритма сортировки. Результат одинаковый, процессы разные. Вот можно их сравнить. А тут? Добавлено через 3 минуты Ну хорошо, допустим мы сравнили, избавились от излишней оптимизации, оставили нужную - получили результат. Как это докажет или опровергнет позицию одной из сторон? Не по теме: В вашей текущей реализации просто исходя из количества действий первый цикл всегда будет медленнее, чем второй. Можно даже не мерить ничего. Но что это значит в контексте спора? Мне вот ответ на этот вопрос не очевиден совсем.
0
|
||
|
фрилансер
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,981
|
|
| 21.11.2019, 16:07 | |
|
DrOffset, в общем, понятно, работает вечное правило оптимизации - сначала нужно доказать, что оптимизация нужна, только потом начинать замерять и оптимизировать
0
|
|
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
||
| 22.11.2019, 00:02 | ||
|
1. Чисто концептуальной: не порождать кода вообще, т.е. быть бесплатной 2. Производить сдвиг указателя на значение времени компиляции. Так как язык требует, чтобы null-указатель превращался именно null-указатель, такой сдвиг должен еще сопровождаться проверкой на null. Это уже дороже, но все равно относительно дешево. 3. Производить модификацию значения указателя на значение времени выполнения. Такое возможно при преобразованиях указателей на члены класса (хотя они формально не являются "указателями"). 4. Выполнять относительно "тяжелые" обращения к структурам в памяти, например, при преобразовании указателей в иерархии с виртуальным наследованием. Опять же, оговорка про null имеет место и здесь. Так что все зависит от контекста.
0
|
||
| 22.11.2019, 00:02 | |
|
Помогаю со студенческими работами здесь
56
Приведение указателей в стиле си
Приведение типов умных указателей Отличие приведение типов указателей Объяснить, что происходит в коде (приведение одного типа указателей к другому?) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|