Здравствуйте, Denis Ivlev, Вы писали:
Pzz>>Это может вообще любого компьютерного телодвижения коснуться, и не специфично для виртуальных методов.
DI>Лол, шта? Как раз специфичен в силу самого механизма вф, на пальцах это было продемонстрировано.
Любое обращение к памяти может оказаться обращением к реальной медленной памяти, а не к быстрому кэшу. А может и вовсе оказаться обращением к области подкачки на диске.
Pzz>>Но вообще, в C++, в котором таблица виртуальных методов общая для всех экземпляров класса,
DI>А что мешает в наколеночной реализации на С иметь одну таблицу на все экземпляры?
Очень неудобно.
Pzz>>у нее больше шансов оказаться в кэше
DI>Почему?
Потому что к vtab'ам популярных классов идет много обращений, что удерживает процессор от вытеснения их из кэша.
DI>Так ведь в реализации ВФ С++ как раз и есть указатели размазанные по структурам, они ведут в таблицу ВФ. В наколеночной реализации это можно как раз подтюнить держа в структурах не указатель, а саму таблицу, таким образом избежав одного похода по памяти.
Лишний проход по памяти не всегда плохо. Обычно избежать его удается за счет использования большего количества памяти, что увеличивает нагрузку на кэш. Иногда выгоднее иметь больше обращений к памяти при том, что они будут чаще попадать по одним и тем же местам. Т.е., обращений, формально, больше, но количество килобайт, к которым относятся эти обращения, меньше, поэтому эти килобайты с большей вероятностью осядут в кэше.
Pzz>>Заинланйенная фукция может запросто отжать из кэша инструкций что-нибудь другое, не менее полезное.
DI>А может и не отжать.
Угу. Если хочется всерьез последние такты из процессора выжать, то надо много и нудно профилировать, причем под разной нагрузкой, на разном железе и т.п. А иначе получаются только голословные утверждения.
DI>Может, если человек форсинлайнит не понимая, что делает. Но я не понял, ты сейчас будешь доказывать, что инлайнниг не оптимизация, а пессимизация?
Инлайнинг — это инструмент, которым надо пользоваться умеючи.