c - 如何确定用 "register"说明符定义的变量是否存储在 CPU 寄存器中?

标签 c cpu-registers register-keyword

我想知道,我们如何确定用 register 说明符定义的变量是否存储在 CPU 寄存器中?

最佳答案

基本上,你不能。 C 标准中绝对没有任何内容可以让控制。

使用 register 关键字给编译器一个提示变量可能存储到一个寄存器中(即允许尽可能快的访问).编译器可以忽略它。每个编译器都可以采用不同的方式来接受/拒绝提示

引用 C11,第 6.7.1 章,(强调我的)

A declaration of an identifier for an object with storage-class specifier register suggests that access to the object be as fast as possible. The extent to which such suggestions are effective is implementation-defined.

FWIW,大多数现代编译器可以检测最常用的变量并将它们分配到实际寄存器中,如果需要。请记住,CPU 寄存器是一种稀缺资源。

关于c - 如何确定用 "register"说明符定义的变量是否存储在 CPU 寄存器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36937570/

相关文章:

c - C语言标准是否规定了对全局寄存器变量的支持

在C中计算除999和1之外的任意两个数字的和

c - 循环仅打印文件的最后一行(2次循环后)

c++ - 从 C/C++ 代码执行 RDMSR 和 WRMSR 指令

c++ - gcc/g++ 可以在忽略我的寄存器时告诉我吗?

将 void 指针复制到另一个 void 指针?

更改一些 MMU 转换表条目 - 正确的方法是什么?

c - 用 C 访问 AVR 寄存器?

arrays - 如何使用 C 中的寄存器存储类创建数组?