|
0 / 0 / 0
Регистрация: 11.11.2017
Сообщений: 50
|
|
Дорого ли приведение указателей?14.11.2019, 18:19. Показов 7535. Ответов 55
Я не встретил эту тему в инете(именно про указатели, а не просто типы), но если она есть, дайте ссылку. На сколько дорога операция приведения указателя в стиле СИ? К примеру, есть два класса, один наследует другой. Дорого ли приведение указателя из указателя на родительский класс на указатель на дочерний? Я знаю, что указатель—это обычный int, который система принимает за адрес в памяти. Переменная, содержащая в себе указатель на объект представляет из себя int со значением вида 0x7f84a41000c0. Тогда, по идее, это не дорого для процессора. Я прав?
0
|
|
| 14.11.2019, 18:19 | |
|
Ответы с готовыми решениями:
55
Приведение указателей Приведение указателей приведение типов указателей |
|
фрилансер
6477 / 5698 / 1132
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 21.11.2019, 12:21 | |
|
COKPOWEHEU, IGPIGP, зачем спорить. Можно же просто провести нагрузочный тест для обоих вариантов. И проверить, сколько времени займёт миллион таких вызовов
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
|
||
| 21.11.2019, 12:32 | ||
|
Виртуальность никогда не реализовывалась через RTTI и сама по себе виртуальность появилась исторически гораздо раньше, чем RTTI (разница в почти 13 лет).
2
|
||
|
Комп_Оратор)
|
|||
| 21.11.2019, 12:36 | |||
|
Можно попробовать. Но если не заставлять строки использовать придётся сравнивать два type_id? А указатель нужно лишь на на проверить. Вечером может поковыряю. А вам, как инициатору, предлагаю положить свою версию теста. ![]() Добавлено через 3 минуты То есть, вы полагаете, type_id и dynamic_cast реализованы по разному и type_id может быть быстрее? Спор об этом возник.
0
|
|||
|
фрилансер
6477 / 5698 / 1132
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 21.11.2019, 12:44 | |
|
IGPIGP, я не знаю точно, как именно организовать тест, чтобы всякие там кеши процессора не повлияли. Вызовы в цикле без всяких заморочек подойдут? Или лучше пересоздавать объект на каждой итерации?
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
|
|||
| 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
|
|||
|
фрилансер
6477 / 5698 / 1132
Регистрация: 11.10.2019
Сообщений: 15,175
|
||||||
| 21.11.2019, 13:20 | ||||||
|
в общем, насчёт корректности теста не уверен, критикуйте
iters: 10000000 dynamic_cast: 1288 ms typeid : 1168 ms
0
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
|
|
| 21.11.2019, 13:36 | |
|
Алексей1153, во-первых участие в замере динамической аллокации сводит на нет всю достоверность.
А что вы хотели этим тестом показать? Можете словами сформулировать?
0
|
|
|
фрилансер
6477 / 5698 / 1132
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 21.11.2019, 13:41 | |
|
DrOffset, лично я - ничего не собирался показывать
https://www.cyberforum.ru/post14016822.html Но разница между двумя интервалами показывает, что выполняется быстрее, поскольку всё остальное в циклах одинаковое.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
|
|||||||||||||
| 21.11.2019, 13:52 | |||||||||||||
|
Но это даже не важно здесь. Важнее понять что именно мы меряем. Вот у нас есть typeid. Что это? Это получение указателя на type_info из VTBL. Код с typeid условно такой:
Код с dynamic_cast условно такой:
1
|
|||||||||||||
|
4085 / 2683 / 432
Регистрация: 09.09.2017
Сообщений: 11,936
|
||||||||||||
| 21.11.2019, 14:05 | ||||||||||||
Собственно, именно отсюда берется "лишний переход по указателю", о котором я говорил с самого начала.
1
|
||||||||||||
|
фрилансер
6477 / 5698 / 1132
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 21.11.2019, 14:12 | |
|
DrOffset, про корректность теста я выше сразу написал - что я не уверен в ней.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
|
||
| 21.11.2019, 14:14 | ||
|
Просто сначала я хотел чтобы вы сами к этому пришли. Если бы вы начали формулировать словами достаточно строго смысл ваших замеров, то сами столкнулись бы с противоречием.
0
|
||
|
фрилансер
6477 / 5698 / 1132
Регистрация: 11.10.2019
Сообщений: 15,175
|
||||||
| 21.11.2019, 14:26 | ||||||
|
DrOffset, ну так в итоге то что, получается, нужно оставить циклы вот в таком виде и запускать в релизе?
0
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,819
|
||
| 21.11.2019, 15:54 | ||
|
Сравнивать имеет смысл только эквивалентные по результату действия. Например два алгоритма сортировки. Результат одинаковый, процессы разные. Вот можно их сравнить. А тут? Добавлено через 3 минуты Ну хорошо, допустим мы сравнили, избавились от излишней оптимизации, оставили нужную - получили результат. Как это докажет или опровергнет позицию одной из сторон? Не по теме: В вашей текущей реализации просто исходя из количества действий первый цикл всегда будет медленнее, чем второй. Можно даже не мерить ничего. Но что это значит в контексте спора? Мне вот ответ на этот вопрос не очевиден совсем.
0
|
||
|
фрилансер
6477 / 5698 / 1132
Регистрация: 11.10.2019
Сообщений: 15,175
|
|
| 21.11.2019, 16:07 | |
|
DrOffset, в общем, понятно, работает вечное правило оптимизации - сначала нужно доказать, что оптимизация нужна, только потом начинать замерять и оптимизировать
0
|
|
|
Вездепух
13203 / 6838 / 1822
Регистрация: 18.10.2014
Сообщений: 17,297
|
||
| 22.11.2019, 00:02 | ||
|
1. Чисто концептуальной: не порождать кода вообще, т.е. быть бесплатной 2. Производить сдвиг указателя на значение времени компиляции. Так как язык требует, чтобы null-указатель превращался именно null-указатель, такой сдвиг должен еще сопровождаться проверкой на null. Это уже дороже, но все равно относительно дешево. 3. Производить модификацию значения указателя на значение времени выполнения. Такое возможно при преобразованиях указателей на члены класса (хотя они формально не являются "указателями"). 4. Выполнять относительно "тяжелые" обращения к структурам в памяти, например, при преобразовании указателей в иерархии с виртуальным наследованием. Опять же, оговорка про null имеет место и здесь. Так что все зависит от контекста.
0
|
||
| 22.11.2019, 00:02 | |
|
Помогаю со студенческими работами здесь
56
Приведение указателей в стиле си
Приведение типов умных указателей Отличие приведение типов указателей Объяснить, что происходит в коде (приведение одного типа указателей к другому?) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|