当前位置:  开发笔记 > 编程语言 > 正文

在C中注册变量使用的一个很好的例子是什么?

如何解决《在C中注册变量使用的一个很好的例子是什么?》经验,为你挑选了2个好方法。

我正在通过K&R阅读并找到关于寄存器变量的小部分,并想知道这里的人是否有一些很好的例子付诸实践.

来自K&R的4.7节:

寄存器声明看起来像
寄存器int x;
注册char c;

要清楚,我只是希望看到一些很酷的代码示例.我(我很确定我)理解主题,所以不要觉得需要输入详细的解释(除非你想).



1> Robert Gambl..:

使用现代编译器时没有很好的寄存器使用示例(阅读:过去15年以上),因为它几乎从来没有任何好处,可以做一些坏事.当你使用寄存器时,你告诉编译器"我知道如何比你更好地优化我的代码",这几乎不是这种情况.使用register时可能会发生以下三种情况之一:

编译器忽略它,这很可能.在这种情况下,唯一的危害是您不能在代码中获取变量的地址.

编译器会尊重您的请求,因此代码运行得更慢.

编译器尊重您的请求,代码运行得更快,这是最不可能的情况.

即使一个编译器在使用寄存器时产生更好的代码,也没有理由相信另一个编译器也会这样做.如果你有一些关键代码,编译器没有很好地优化你最好的选择可能是使用汇编程序,但是当然要做适当的分析来验证生成的代码是否真的是一个问题.


这个答案有很大的影响.[参考此答案] [大部分注册声明已从Perl代码中删除](https://github.com/Perl/perl5/commit/eb578fdb5569b91c28466a4d1939e381ff6ceaf4).
"有三件事可能发生,两件事情不好"?我之前在哪里听过...... ;-)
这个答案有误导性.`register`关键字不是关于硬件寄存器,而是关于优化.它的唯一作用是不能采用这种变量的地址.特别是它可以用于资产变量的别名,这可能非常有用.
这不是误导,它是错误的.一致的编译器*不能*忽略`register`:取变量的地址无效,它不能忽略它.这是关键字唯一能做的事情:生成额外的检查和错误以帮助*人类*.

2> Ilya..:

一般来说,我同意罗伯特,但作为任何好的规则,这个也有例外.
如果您在深度嵌入式系统上工作,您可能比编译器更了解如何针对特定硬件体系结构上的特定应用程序优化代码.

但在99%的案例中,罗伯茨的解释也适用于嵌入式词.


这看起来非常像罗伯特所说的那样诚实.
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有