我应该在我的phone
变量上使用寄存器关键字吗?我有以下代码:
void *anything(Caller *caller)
{
register void *phone = caller->phone;
/* or this */
void *phone = caller->phone;
if (phone)
{
return phone;
}
return NULL;
}
有什么区别吗?我应该怎么做?
我应该在我的phone
变量上使用寄存器关键字吗?我有以下代码:
void *anything(Caller *caller)
{
register void *phone = caller->phone;
/* or this */
void *phone = caller->phone;
if (phone)
{
return phone;
}
return NULL;
}
register
关键字旨在为编译器提供一种优化提示。问题是,编译器比你更了解你的代码,现在不需要这样简单的提示来生成更好的代码。
因此,现代编译器使用register
关键字的唯一作用是防止您使用&
获取变量的地址。只有这些。
register
关键字不仅仅是一个提示,而是一个严格的命令... - vszregister
与void *
一起没有“特殊规则”,register
将像对待任何变量一样处理void *
,建议编译器将这种变量放入CPU寄存器中,以表明它将被频繁使用。但是,通常情况下没有理由在任何地方使用register
,因为当前编译器中包含的优化器比程序员更擅长猜测应该将哪些变量放入寄存器,并且几乎总是会完全忽略register
关键字。C99标准还提供了有关register
的一些额外细节(§6.7.1 ¶4):声明具有存储类别说明符register
的标识符的对象建议尽可能快地访问该对象。这种建议的有效程度是实现定义的。因此,使用register
最有可能只获得假装在寄存器中拥有变量的缺点。注意,C++标准放宽了这些限制,但显然,如果您尝试获取register
变量的地址,它就不再保留在寄存器中了。长话短说,register
主要是过去的遗物,在避免使用它是最好的用法。 :)register
关键字告诉编译器你想将该变量存储在 CPU 寄存器中,而不是系统 RAM 中。一般来说,这是一个糟糕的想法,大多数编译器优化程序可以更好地处理变量,许多编译器完全忽略该关键字。
只需将其删除即可。
register
关键字告诉编译器尝试将变量保存在CPU的寄存器中,以增加局部性原理。程序员知道该变量将被多次访问,因此希望将其保存在可以获得最快速度的内存位置中。寄存器存储变量不能应用于指针。因为寄存器变量被放置在机器寄存器中。
register
关键字在它最初的用途上已经完全过时。我能想到的唯一潜在用途是,如果您希望编译器在任何人尝试获取变量地址时生成错误,则可以使用该关键字。 - R.. GitHub STOP HELPING ICE