我们必须只使用寄存器变量?

问题描述 投票:0回答:2

我们知道

register variable
faster accessible
,并且在创建任何变量
compiler
中。

register variable

我只想知道“是否有任何情况/应用程序

我们只需要使用register int val;

,而其他变量在这种情况下没有用?”

如果您可以放置一块代码,那么理解。
    

“正如我们所知道的” - 实际上,我们知道这一点。
c variables storage cpu-registers
2个回答
7
投票
register variable

是编译器的一个sogguggestion,而不是要求。当今的疯狂优化编译器很少需要。从当前(C11)标准:

具有存储级规范寄存器的对象的标识符声明 建议对对象的访问尽可能快。这样的程度 建议是有效的,是实施定义的。

因此,它进入登记册。它也可以进入更快的内存,常规内存,甚至在磁盘上或在蒙古的服务器上,以惩罚编码器使用不必要的关键字:-)amay

发现在编译器中很有用,
aren't

非常聪明(例如,一些较旧的,嵌入式的东西),但即使如此,您也不会使用它来使用它 - 通常,您应该使用它忘了它。它和

register
.

一样有用。 例如,以例子为例,让我们假设一个相当“比较优越的”编译器,将每个C指令视为一个单元。这样,我的意思是: auto

将转换为组件(经典的负载商店体系结构): int x = 1; x = x + 7; x = x - 2; useX (x); 其他单词,没有优化意识到该值仍在添加之后,因此无需再次加载它。 在这样的(脑死亡)编译器中,使用loadi r0, 1 ; set r0 to 1 stor r0, [x] ; store to memory load r0, [x] ; load from memory addi r0, 7 ; add 7 stor r0, [x] ; store to memory load r0, [x] ; load from memory subi r0, 2 ; subtract 2 stor r0, [x] ; store to memory load r0, [x] ; load from memory call useX ; call the function 可能会提供非常方便的效率。代码:

r0

可能会沿着以下方式提供更好的代码:

register
当然,所有这些东西都取决于编译器及其使用寄存器。我给出的代码只是一个人为的示例。正如我所说,有了现代编译器,这很少是必要的。

Bottom Line,在回答您的特定问题时:“我们是否有任何情况/应用程序在某些情况下仅使用寄存器变量,而其他变量在这种情况下没有用?”,答案是否。如果它确实是C编译器,则无需使用

register int x = 1; x = x + 7; x = x - 2; useX (x);
关键字。
    

没有任何情况,您可以使用
loadi r0, 1 ; set r0 to 1 addi r0, 7 ; add 7 subi r0, 2 ; subtract 2 call useX ; call the function

。但是除了它似乎是城市传奇外,

register

在C程序中具有语义含义:用
register

而不是
register
声明的变量,默认,不能受到

register

的约束,所以他们的地址无法接受。这意味着它们永远无法与其他变量相似,因此
auto
只是一个优化提示,就像

&

.

有一种情况,不仅值得您提示编译器为变量分配寄存器,还要为其命名特定寄存器(然后不允许忽略

register
关键字):实现有效的螺纹虚拟机。


3
投票
oocamlbytecodeinterneter

.在您必须混合C和组装代码的任何其他情况下,将C变量手动映射到寄存器都是必不可少的。

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.