我可以在寄存器中获取一个小的本地数组吗?

时间:2015-04-22 21:12:17

标签: gcc llvm compiler-optimization cpu-registers stackframe

我可能被迫编写一些性能关键的C / C ++代码,涉及多个输入数组和一个结果数组(更不用说确切的类型)。出于某些原因,我想在我的输出数组的小块上工作,根据输入修改它们 - 但是不经常读取并将它们写回内存,因为我不信任缓存(即,我担心输入数组会覆盖它,而我最终会实际进行内存读写,这是可怕的......)所以,我正在考虑安全地玩它并试着继续寄存器。

  • 我是否可以获得一个仅存储在寄存器中的小型本地固定长度数组?
  • 我如何实现这一目标?
  • 这样的阵列有多大(比如,在Haswell或Skylake核心上)?

1 个答案:

答案 0 :(得分:0)

一般来说,没有。大多数CPU架构都没有提供任何索引寄存器的方法,因此无法将数据作为数组访问。 (例如,在ARM上,有r1r15的寄存器,但无法通过其编号直接访问寄存器。这同样适用于x86。)

您对缓存驱逐的担忧可能是错误的。现代CPU架构通常非常擅长管理缓存。