Чтобы добиться максимальной производительности, постарайтесь свести к минимуму потери в кеше.Я думаю, что мы все можем согласиться с этим.
Я предлагаю и хотел бы спросить о следующем.Я говорю, что это:
template <typename T>
struct {
T* a;
T* b;
T* c;
};
более уязвимо для ошибок кэша, чем это:
template <typename T>
struct {
T a;
T b;
T c;
};
Часто я привожу аргумент: Минимизация выделения кучи для минимизации ошибок кэша .Я ошибаюсь по этому поводу?
Обоснование: Из моих рабочих эмуляторов (я написал эмулятор PowerPC, включая MMU): память тянется по страницам или блокам.Если вы разместите все в стеке, у компилятора будет больше шансов получить все в непрерывном фрагменте памяти, что означает, что при вытягивании одной страницы / блока будет содержаться вся ваша структура / класс (при условии, что вы не используете гигантские структуры /классы), и, следовательно, у вас будет меньше пропусков кеша.
Я не совсем понимаю строки кеша в современных процессорах, когда люди упоминают о них (и я не знаю, относится ли это просто к таблице страницпройти процесс на нескольких уровнях кеша).Некоторые люди сказали мне, что мой аргумент неверен для этого, и я не понял, что они имели в виду.Может кто-нибудь сказать мне, является ли мой аргумент правильным / неправильным и является ли он неправильным по определенной причине в архитектурах x86 / x64?