据我所知,在C中,我们可以使用关键字“register”向编译器建议变量应该存储在CPU寄存器中。 CPU指令中涉及的所有变量最终都会存储在CPU寄存器中以供执行吗?
答案 0 :(得分:5)
register
关键字是告诉编译器变量被大量使用的一种方式。确实,通常必须将值临时加载到寄存器中以对它们执行计算。该名称来自于编译器可能将变量保留在寄存器中的整个持续时间范围内的想法,而不是仅仅在计算中使用它时的暂时性。
为了优化,该关键字已经过时,因为现代编译器可以在没有程序员帮助的情况下确定何时大量使用变量(以及何时没有使用其地址)。
答案 1 :(得分:4)
您应不使用该register
关键字。这是一个古老的遗物,为了向后兼容而维护。大多数编译器都会忽略它(默认情况下)。
可能存在异常,但它们非常罕见,请参阅编译器手册。
CPU指令中涉及的所有变量最终是否都会存储在CPU寄存器中以供执行?
是的,这是事实。但CPU寄存器是有限的,因此变量通常从“正常”存储器加载/存储,并且只是暂时存在于寄存器中。 register
关键字是一种指示应该占用寄存器更长时间的高优先级变量的方法。与i
中的for(i = 0; ...)
一样。
答案 2 :(得分:1)
在过去,编译器并不像今天那样聪明。从程序员到编译器的提示是,此变量应存储在寄存器中以允许快速访问/修改。今天,几乎所有体面的编译器都实现了聪明的寄存器分配算法,这些算法超越了人类的思想。
答案 3 :(得分:1)
大多数变量将 加载到寄存器中一段时间......只要有必要做他们需要做的事情。 register
关键字提示他们应该保留。
编译器的优化已经变得更好了,register
关键字不是很有帮助。事实上,如果你的编译器完全尊重它(很多人都没有),它甚至可能搞砸了你(通过绑定编译器的手,使某些优化变得不可能)。所以现在这是一个非常糟糕的主意。