LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Ну и что? Сложение-то произвести всё равно надо во время выполнения, если в функцию пришёл неизвестный указатель на объект. Другое дело, я не настолько знаю ассемблер и может быть за это вычисление нет дополнительных тактов, смутно припоминаю какие-то команды для адресации с константным смещением. Но это если мы не хотим использовать trait object отдельно от «самого объекта». Если хотим использовать, мы должны его выделить на стеке, скопировать в него указатель на данные и указатель на VMT. Оптимизатор теоретически может от всего этого при удаче избавиться, но изначально это так. В С++ сам объект в себе содержит (по смещениям) trait object-ы для всех предков и их не нужно отдельно создавать.

Исходная версия den73, :

Ну и что? Сложение-то произвести всё равно надо во время выполнения, если в функцию пришёл неизвестный указатель на объект. Другое дело, я не настолько знаю ассемблер и может быть за это вычисление нет дополнительных тактов, смутно припоминаю какие-то команды для адресации со смещением. Но это если мы не хотим использовать trait object отдельно от «самого объекта». Если хотим использовать, мы должны его выделить на стеке, скопировать в него указатель на данные и указатель на VMT. Оптимизатор теоретически может от всего этого при удаче избавиться, но изначально это так. В С++ сам объект в себе содержит (по смещениям) trait object-ы для всех предков и их не нужно отдельно создавать.