指针可能指向cpu寄存器吗?

Poo*_*ria 5 c++ optimization pointers reference

我想知道指针是否指向cpu寄存器,因为在它可能没有的情况下,使用引用而不是指针尽可能使编译器有机会进行一些优化,因为引用的对象可能驻留在某个寄存器中但指向的对象通过指针可能不会.

Mic*_*urr 9

一般来说,CPU寄存器没有内存地址,虽然CPU架构可以使它们可寻址(我不熟悉任何 - 如果有人知道,我很感激评论).但是,C中没有标准的方法来获取寄存器的地址.实际上,如果使用register存储类标记变量,则不允许使用&运算符获取变量地址.

关键问题是别名 - 如果编译器可以确定对象没有别名,那么它通常可以执行优化(无论是通过指针还是引用访问对象).我不认为你会使用指针上的引用获得任何优化好处(一般来说).

但是,如果将对象复制到局部变量中,那么编译器可以更容易地确定本地没有别名,假设您没有传递临时地址.这是一个可以帮助编译器优化的情况; 但是,如果复制操作很昂贵,最终可能无法获得回报.

对于适合CPU寄存器的东西,复制到temp通常是一种很好的方法 - 编译器非常适合优化寄存器.

  • @Armen:是的.@MichaelBurr:Microchip PIC具有映射到每个存储体的低12字节的实际CPU寄存器(例如状态,程序计数器,工作寄存器,索引寄存器).http://ww1.microchip.com/downloads/en/DeviceDoc/41413A.pdf p.23 (4认同)
  • @Nick T:感谢指针(`**rimshot**`). (2认同)

Mic*_*eyn 2

我想你的意思是说引用引用的整数值是否驻留在寄存器中。

通常,大多数编译器以与指针相同的方式对待引用。也就是说,引用只是内置了特殊“取消引用”语义的指针。因此,遗憾的是,与可以放入寄存器的整数值不同,通常没有优化。引用和指针之间的唯一区别是引用必须(但不是由编译器强制)引用有效对象,而指针可以为 NULL。