c - 在iOS中应用寄存器int

标签 c data-structures arm processor

我了解了注册

示例:

register int a;

表示编译器更快地使用变量(将我的 int 变量保存在寄存器中) 但如果处理器中没有寄存器 - 对于我的变量集 auto

iPhone ARM处理器可以有这个特殊的寄存器吗?

最佳答案

任何处理器都有寄存器(除了非常罕见且现已失效的基于堆栈的架构)。 C 中的关键字 register 只是编译器将该变量映射到寄存器而不是堆栈上的提示。这来自“古代”时代,当时将变量映射到寄存器的算法效率不高。如今,这些算法的映射效果比人类更好,因此实际上没有必要使用register提示。

我真的不了解 iPhone ARM 编译器,但我真的不认为他们不使用现代算法将变量映射到寄存器。

另请注意,我告诉您的内容对于使用优化标志进行编译是有效的。


寄存器是处理器拥有的最快的内存,它驻留在 CPU 内部,它们以处理器的速度运行,并且访问它没有时间损失。然而,寄存器是有限的,而且很少,从 4-6 个通用寄存器(在 CISC 架构上)到 10-20 个寄存器(在 RISC 架构上)。编译器将尝试将最使用访问的变量映射到这些寄存器。当他用完寄存器时,他必须将变量映射到堆栈上,这要慢得多(它在 RAM 中,但大多数都缓存在缓存 L1 或 L2 中)。
因此,哪些变量映射到寄存器以及哪些变量映射到堆栈的决定对性能有重大影响,但是,正如我所说,现在编译器在将变量映射到寄存器方面比人类做得更好。

关于c - 在iOS中应用寄存器int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817305/

相关文章:

java - 添加到集合 O(n)?

c - BPF Helper 的 eBPF 隐式声明

java - JVM 在 attachCurrentThread JNI 回调调用时崩溃

java - 如何打印 Trie 中的所有单词?

C++数据结构代替数据库

c - 从C程序员的角度来看,ARM体系结构之间的差异?

arm - 如何解读ARM的SMC调用?

arm - 显式访问 ARM 上的存储寄存器

c - C中的慢基数排序

c - a[n] 真的可以与 *(a+n) 互换吗 - 为什么 sizeof 返回两个不同的答案?