Использует ли какой-либо язык ВМ / компилятор свойство экземпляра одного класса для оптимизации элементов массива объектов бога?

В этом году появилось много популярных обсуждений по оптимизации использования кэша 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 .. ,

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]