我读到 gcc 支持将全局变量定义为寄存器存储变量。我想知道的是,标准是否有针对此支持的任何规范。
最佳答案
有一种常见的误解,认为 C 的关键字 register
谈论的是硬件寄存器。这可能是该概念的起源,但在现代 C 中,这不是目的。 register
唯一真正的影响是 &
不允许出现在这样的野兽上。
它们可能以编译器想要的任何方式实现,硬件寄存器、立即指令或在堆栈上,您不会知道。您所知道的是,register
变量不能与其他变量互为别名。
为了更直接地回答您的问题,文件范围内的 register
不是 C 语言的一部分。如果可以,那将允许我们声明几乎任何基础的 register const
变量,可以用作某种 global constants。 .
将硬件寄存器映射到特定变量是编译器提供的扩展,例如 gcc。 Gcc 的功能,作为扩展,也适用于文件范围。但这是非常令人望而却步的,因为通常 CPU 没有很多可用的硬件寄存器。
关于c - C语言标准是否规定了对全局寄存器变量的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607507/