我有这样的东西
register unsigned int a, b, c;
int n;
for (n = 0; n < 10; ++n){
c = a + b
b = a
a = c
array[n] = c;
}不管它做什么,都无关紧要。代码以现在的方式运行得很快,如果删除register关键字,则运行速度会变慢。然而,当我在int n之前添加寄存器时,它实际上运行得比现在慢,但比不使用寄存器时要快。
有人能给我解释一下吗?谢谢。
发布于 2010-01-15 08:58:50
register会提示编译器将变量放在寄存器中,而不是放在内存/堆栈空间中。在某些情况下,没有足够的寄存器为您放置此关键字的每个变量提供寄存器,因此将其放在太多变量上可能会迫使其他一些变量再次退出寄存器。
不过,这只是一个提示,编译器不需要理解它。
发布于 2010-01-15 08:59:03
你是怎么计时的?实际上,register通常什么也不做。这是在编译器技术非常原始,编译器自己无法确定寄存器分配时留下的一块残留物。它被认为是为该变量分配一个寄存器的提示,并且对于经常使用的变量很有用。如今,大多数编译器简单地忽略它,并根据自己的算法分配寄存器。
发布于 2010-01-15 09:57:38
在gcc中,register绝对不会被忽略,除非您指定优化选项。使用如下代码测试您的代码
unsigned int array[10];
int n;
#define REG register
int main()
{
REG unsigned int a, b, c;
for (n = 0; n < 10; ++n){
c = a + b;
b = a;
a = c;
array[n] = c;
}
}获取(取决于REG是定义的还是空的)

http://picasaweb.google.com/lh/photo/v2hBpl6D-soIdBXUOmAeMw?feat=directlink
左边显示的是使用寄存器的结果。
https://stackoverflow.com/questions/2068721
复制相似问题