Pull to refresh

Comments 9

Может быть буду непопулярен с таким мнением, но: и что? Если мы не на эмбедед железе, то какое нам дело до размеров виртуальной таблицы? На скорость это, конечно, влияет, но как сильно? Интересно было бы посмотреть на бенчмарки, желательно из реального кода, где кроме вызовов есть что-то ещё. Порог скорости при переходе с невиртуального вызвова, который потенциально инлайнится, на виртуальный мне понятен. А как влияет размер vtbl угадывать не возьмусь.
С одной стороны, вы правы. С другой стороны, в статье и не написано, что нужно отказываться от того или иного инструмента. Там скорее о том, что любое лекарство, будучи неправильно применяемо, обращается в яд. И множественное наследование из чисто утилитарных требований «быть кем-то» и «уметь то-то» обращается в кадавра мегабайтных размеров, с рекурсивным спуском по дереву при каждом чихе.
Уже написал в личку, автор не отреагировал, почему статья в хабе «Objective C»?
Намного логичнее разместить ее в «C++»
Спасибо за наблюдение, исправили недочет
«Если я правильно всё посчитал, то он уже достигнет половины килобайта или около того»
Всю статью в виртуальную таблицу не заглядывали, а сейчас как-то её размер посчитали?
Хотя-бы перегрузите аллокатор и покажите сколько байт требуется на экземпляры классов, а в идеале разобрать как оно там лежит и как работает, а то сейчас это голословные утверждения.
Все легко и просто можно увидеть своими глазами на годболте

Нет там половины килобайта. И таблица одна на каждый тип класса.
Да и по скорости проблем тоже нет — всего лишь добавляется один косвенный вызов.

А вот конструкторы становятся нетривиальными.
UFO just landed and posted this here
В 32-х разрядной архитектуре размер будет равен 8. 4 — указатель + 4 int без выравнивания.

А как правильно писать по-русски — без выравнивания или без паддинга/слопа? Есть устоявшийся русский термин?
Термин «выравнивание» вполне устоявшийся
Sign up to leave a comment.