我已经读过CPU寄存器是有限的,值也可以存储在auto中。
如何确认变量是否存储在C?
的寄存器中可以存储哪些变量?
答案 0 :(得分:2)
大多数编译器都支持生成汇编语言输出的标记,例如-S
或/S
。您可以检查此代码以查看编译器是否将给定变量存储在给定点的寄存器中。
没有类型保证适合寄存器。事实上,一些基于堆栈的机器,包括Andrew Tannenbaum教科书中JVM的硬件实现,根本没有明确的寄存器。但是,int
通常与寄存器大小相同(定义{{1}}和int
的64位环境为32位,后向兼容性为例外),指针通常包含机器地址因此通常与寄存器大小相同(分段存储器模型,如16位x86,其中地址适合两个寄存器,是例外),long
和size_t
保持数组索引和因此通常与寄存器大小相同(x32目标,具有64位代码但具有32位存储空间,是一个例外)。大多数CPU都有浮点寄存器,每个浮点寄存器都可以持有ptrdiff_t
进行数学运算,但有些则没有。
如果你想要的是快速便携式代码,最好的办法是使用来自double
的{{1}}和int_fast16_t
等类型。这些保证是通常最快的尺寸,至少足够宽。在普通目标上,这将是机器寄存器的大小。