我想知道一个指针是否可能指向一个 cpu 寄存器,因为在这种情况下它可能不会,在可能的情况下使用引用而不是指针会给编译器提供做一些优化的机会,因为引用的对象可能驻留在某个寄存器中,但指针指向的对象可能不是。
最佳答案
一般来说,CPU 寄存器没有内存地址,尽管 CPU 架构可以使它们可寻址(我对任何一个都不熟悉 - 如果有人知道,我将不胜感激)。但是,在 C 中没有标准的方法来获取寄存器的地址。事实上,如果您使用 register
存储类标记变量,则不允许使用 &
运算符获取该变量地址。
关键问题是别名——如果编译器可以确定一个对象没有别名,那么它通常可以执行优化(无论该对象是通过指针还是引用访问)。我认为使用指针引用不会获得任何优化好处(无论如何通常)。
但是,如果您将对象复制到局部变量中,则假设您不传递临时地址,编译器可以更容易地确定没有局部别名。在这种情况下,您可以帮助编译器进行优化;但是,如果复制操作代价高昂,最终可能不会得到返回。
对于适合 CPU 寄存器的内容,复制到临时文件通常是一个好方法 - 编译器非常擅长将它们优化到寄存器。
关于c++ - 指针可以指向 cpu 寄存器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937171/