寄存器变量

news/2024/7/10 4:33:50 标签: 编译器, 优化, 存储, 百度, 语言, c
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

本文转自class="tags" href="/tags/BaiDu.html" title=百度>百度百科

class="title">寄存器变量


在程序运行时࿰c;根据需要到内存中相应的coration:underline; color:rgb(255,0,0); font-weight:bold">class="tags" href="/tags/CunChu.html" title=存储>存储单元中调用࿰c;如果一个变量在程序中频繁使用࿰c;例如循环变量࿰c;那么࿰c;系统就必须多次访问内存中的该单元࿰c;影响程序的执行效率。因此࿰c;C\C++class="tags" href="/tags/YuYan.html" title=语言>语言还定义了一种变量࿰c;color:rgb(204,0,0); font-weight:bold">不是保存在内存上࿰c;而是直接class="tags" href="/tags/CunChu.html" title=存储>存储在CPU中的寄存器中࿰c;这种变量称为寄存器变量。  寄存器变量的定义形式是:  register 类型标识符 变量名   color:rgb(204,0,0); font-weight:bold">寄存器是与机器硬件密切相关的࿰c;不同类型的计算机࿰c;寄存器的数目是不一样的࿰c;通常为2到3个࿰c;对于在一个函数中说明的多于2到3个的寄存器变量࿰c;C编译程序会自动地将寄存器变量变为自动变量。  color:rgb(255,0,0); font-weight:bold"> 由于受硬件寄存器长度的限制࿰c;所以寄存器变量只能是char、int或指针型。寄存器说明符只能用于说明函数中的变量和函数中的形参࿰c;因此不允许将外部变量或静态变量说明为"register"。 color:rgb(204,0,0); font-weight:bold"> register型变量常用于作为循环控制变量࿰c;这是使用它的高速特点的最佳场合。比较下面两个程序的运算速度。


/* 程序1 */ 

 main ( )

  {   

register int temp, i; 

 for ( i=0; i<=30000; i++ )  

for ( temp=0; temp<=100; temp++ ) ;  

printf ("ok\n");  }  

/* 程序2 */  

#include <stdio.h> 

 main( ) 

 

{   int temp, i;

  for ( i=0; i<=30000; i++ ) 

 for ( temp=0; temp<=100; temp++ ) ;  

printf ("ok\n");  }  

这两个程序中࿰c;前者使用了两个寄存器变量࿰c;后者使用了两个自动变量程序除此之外完全一样。

但运行时感觉的执行速度是不同的࿰c;前者color:rgb(204,0,0); font-weight:bold">使用寄存器变量的程序要比后者使用自动变量的程序要快。

color:rgb(204,0,0); font-weight:bold">如果在tubro 2的环境下运行程序2࿰c;则应该将class="tags" href="/tags/BianYiQi.html" title=编译器>编译器class="tags" href="/tags/YouHua.html" title=优化>优化选项"use register variable"开关关上(OFF)

color:rgb(204,0,0); font-weight:bold">࿰c;否则࿰c;class="tags" href="/tags/BianYiQi.html" title=编译器>编译器自动class="tags" href="/tags/YouHua.html" title=优化>优化程序使用寄存器࿰c;两个程序会得到相同的结果。)  

color:rgb(204,0,0); font-weight:bold">由于register变量使用的是硬件CPU中的寄存器࿰c;寄存器变量无地址࿰c;所以不能使用取地址运算符"&"求寄存器变量的地址。

cle>

http://www.niftyadmin.cn/n/567299.html

相关文章

静态局部变量,静态全局变量

本文转自百度百科 静态变量的类型说明符是static。 静态变量当然是属于静态存储方式&#xff0c;但是属于静态存储方式的量不一定就是静态变量&#xff0c; 例如外部变量虽属于静态存储方式&#xff0c;但不一定是静态变量&#xff0c;必须由 static加以定义后才能成为静态外部…

iOS之优秀架构技术实践系列文章(部分):

架构技术实践系列文章&#xff08;部分&#xff09;&#xff1a; 魏晓军&#xff1a;React Native实践之携程Moles框架学霸君姜波&#xff1a;耳目一新的在线答疑服务背后的核心技术爱乐奇麦凯臻&#xff1a;在线教育的内容研发和技术的迭代创新长虹李玮&#xff1a;老牌消费电…

iOS学习之GCD 信号量详解,dispatch_semaphore、NSOperationQueue

当我们在处理一系列线程的时候&#xff0c;当数量达到一定量&#xff0c;在以前我们可能会选择使用NSOperationQueue来处理并发控制&#xff0c;但如何在GCD中快速的控制并发呢&#xff1f;答案就是 dispatch_semaphore &#xff0c;对经常做unix开发的人来讲&#xff0c;我所介…

动态存储方式和静态存储方式

静态存储方式 所谓静态存储方式是指在程序运行期间分配固定的存储空间的方式 动态存储方式   所谓动态存储方式是指在程序运行期间根据需要进行动态的分配存储空间的方式。  常见的方法是使用 指针&#xff0c;对将要存的数据进行动态的内存分配

指针汇总--百度百科

百科名片 在日常生活中指针是仪器或钟表上的&#xff0c;用来指示测量的数据的装置。在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器。针灸中以手指代替针刺按压或爪切某些穴位&#xff0c;治病的一种治疗方法&#xff0c;常用于突发…

iOS开发之第三方支付微信支付教程,史上最新最全第三方微信支付方式实现、微信集成教程,微信实现流程

本章项目demo: https://github.com/zhonggaorong/weixinLoginDemo 本章不讲解&#xff1a; 微信sdk的集成 &#xff0c; 项目集成的文章请参照 &#xff08;包含微信登录&#xff09;&#xff1a; http://blog.csdn.net/zhonggaorong/article/details/51719050 1. 微信支付微…

TURBO C

TURBO   Turbo C是美国 Borland 公司的产品,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套 Turbo系列软件, 如Turbo BASIC, Turbo Pascal, Turbo Prolog, 这些软件很受用户欢迎。该公司在1987年首次推出Turbo C 1.0 产品, 其中使用了全然一新的 集…

JAVA Script 学习之html页面中出现乱码

当html页面中出现乱码的时候&#xff0c;首先检查下有没有加上meta &#xff0c;指定字符集。 代码如下&#xff1a; <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> demo 源码如下&#xff1a; <!DOCTYPE html> <…