Кэш ЦП не знает и не заботится, используете ли вы стек или кучную память, он работает с необработанными адресами памяти, разделенными на строки кэша (например, 64 байта).Кроме того, подсистема виртуальной памяти работает на страницах (например, 4 КБ), что также может быть источником замедления.Таким образом, важно , чтобы оставаться в или около одной и той же области памяти , т. Е. Путем повторного использования памяти.
Да, стековая память часто является безопасной ставкой, когда онадоходит до кеширования, так как вершина стека обычно "горячая", то есть уже кешируется.Но стек не предназначен для хранения больших объектов или объектов динамического размера, так как это приведет к перемещению вершины из горячей зоны и отмене цели.
std::vector
может быть дружественным к кешу.Просто убедитесь, что reserve
памяти заранее, таким образом вы избежите дорогостоящих перераспределений и перемещения данных, и используете распределитель памяти, дружественный к кешу, такой как jemalloc (встроенный в BSD) или ptmalloc (встроенный вLinux).И конечно же, профиль, профиль, профиль.