В этом году появилось много популярных обсуждений по оптимизации использования кэша C ++ (как этот). Из этого видео кажется, что у него есть объекты бога (псевдокод)
class apples {
vector<int> property_1_Values;
vector<float> property_2_Values;
};
вместо
class apple {
int property_1;
float property_2;
};
так что итерация от N-го элемента до M-го будет оптимальной для кэша (* они также говорят, что процессор может предсказывать не только ++
/--
но также +-const
последовательности).
Ну, я вижу смысл, также я могу видеть, как переопределить логику моих программ, чтобы вписаться в такую модель … все же это похоже на действительно архитектурно плохую идею — создавать объекты бога, заново изобретать наследование … Так что мне кажется это должна быть оптимизация компилятора не программисты в голову.
Итак, мне интересно, что ОО-язык VM / компилятор уже реализовал такую реструктуризацию объектов во время компиляции / эвакуации программы? (чтобы программисту OO не пришлось бы делать такие оптимизации вручную)? .NET, JVM, Clang, кто-нибудь?
Обновить:
Профиль как руководство для реализации такой вещи — очень печальный и плохой ответ — для оптимальной реализации такого объекта бога потребуются тонны профилирования, отладки и т.д. добавление или удаление было бы болезненным …) именно поэтому я надеялся, что существующие виртуальные машины уже сделали это. Я не рассматривал генераторы кода / классы шаблонов, которые бы обеспечивали фабрику резонирующим интерфейсом в C + … поэтому идея такого рода вещей кажется пугающей, когда у вас есть 100 + k строк кода и новый не проверенный объект God .. ,
Задача ещё не решена.