c++ - 指针可以指向 cpu 寄存器吗?

标签 c++ optimization pointers reference

我想知道一个指针是否可能指向一个 cpu 寄存器,因为在这种情况下它可能不会,在可能的情况下使用引用而不是指针会给编译器提供做一些优化的机会,因为引用的对象可能驻留在某个寄存器中,但指针指向的对象可能不是。

最佳答案

一般来说,CPU 寄存器没有内存地址,尽管 CPU 架构可以使它们可寻址(我对任何一个都不熟悉 - 如果有人知道,我将不胜感激)。但是,在 C 中没有标准的方法来获取寄存器的地址。事实上,如果您使用 register 存储类标记变量,则不允许使用 & 运算符获取该变量地址。

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

但是,如果您将对象复制到局部变量中,则假设您不传递临时地址,编译器可以更容易地确定没有局部别名。在这种情况下,您可以帮助编译器进行优化;但是,如果复制操作代价高昂,最终可能不会得到返回。

对于适合 CPU 寄存器的内容,复制到临时文件通常是一个好方法 - 编译器非常擅长将它们优化到寄存器。

关于c++ - 指针可以指向 cpu 寄存器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937171/

相关文章:

c++ - 同名函数

C++ 执行类型检查但不编译文件

pointers - 如何定义一个函数,该函数接收一个指针作为参数并返回一个指向该参数的子节点之一的指针?

c - C 中 sizeof 运算符中的参数

C - 如何使用指向结构的指针复制结构

c++ - qualified::toplevel_namespace 和 unqualified toplevel_namespace 之间有什么区别吗?

c++ - 错误错误 C3861 : 'cvPyrSegmentation' : identifier not found

iphone - 在 iPhone/iPad 中发送一个 http 请求的电池消耗是多少?

python - 如何在python源代码中检测I/O(I/O的标准库方式)

python - Newton - python 中的 CG 优化,雅可比行列式的问题