`
helpbs
  • 浏览: 1165305 次
文章分类
社区版块
存档分类
最新评论

C语言的register

 
阅读更多
register可以用于变量的声明,提示他们应该存储于机器的硬件寄存器而不是内存中,这类变量称为
寄存器变量。通常,寄存器变量比存储于内存的变量访问起来效率更高。但是,编译器并不一定要理睬
register关键字,如果有太多的变量被声明为register,它只选取前几个实际存储于寄存器中,其余的
就按普通变量处理。如果一个编译器自己具有一套寄存器优化方法,它也可能忽略register关键字,其
依据是由编译器决定哪些变量存储于寄存器中比人脑的决定更为合理一些。
在典型情况下,你希望把使用频率更高的那些变量声明为寄存器变量。在有些计算机中,如果把指针
变量声明为寄存器变量,程序的效率将能得到提高,尤其是那些频繁执行间接访问操作的指针。你可以
把函数的形式参数声明为寄存器变量,编译器会在函数的起始位置生成指令,把这些值从堆栈复制到
寄存器中。但是,完成有可能,这个优化措施所节省的时间和控件的开销还抵不上复制这几个值所用的开销。
寄存器变量的创建和销毁时间和自动变量相同,但它需要一些额外的工作。在一个使用寄存器变量的函数
返回之前,这些寄存器先前存储的值必须恢复,确保调用者的寄存器变量未被破坏。许多机器使用运行时堆栈来
完成这个任务。当函数开始执行时,它把需要使用的所有寄存器的内容都保存到堆栈中,当函数返回时,这些值再
复制回寄存器中。
在许多机器的硬件实现中,并不为寄存器制定地址。同样,由于寄存器值照的保存和恢复,某个特定的寄存器在
不同的时刻所保存的值不一定相同。基于这些理由,机器并不向你提供寄存器变量的地址。
分享到:
评论

相关推荐

    C语言关键字auto与register的深入理解

    关键字概述很多朋友看到这儿可能会有疑问,往往其它讲C语言的书籍都是从HelloWorld,数据类型开始C语言学习的,为什么我们要从C语言的关键字开始呢?关于这点,我有两点需要说明:本章节面向的读者对象是有一定的...

    C语言中auto,register,static,const,volatile的区别详细解析

    以下是对C语言中auto,register,static,const,volatile的区别进行了详细的分析介绍,需要的朋友可以过来参考下

    C++在C语言基础之上增强的几个实用特性总结

    变量的定义 C语言中的变量都必须在作用域开始的位置定义!! C++中更强调语言的“实用性”,所有的变量都可以...对C语言register的增强 register关键字 请求编译器让变量a直接放在寄存器里面,速度快 在c语言中 regis

    C语言中auto,register,static,const,volatile的区别

    C语言中auto,register,static,const,volatile的区别 最容易混淆的几个关键字!

    传智播客_C++基础课程讲义_v1.0.7

    附录2:C语言register关键字—最快的关键字 6 一、皇帝身边的小太监----寄存器 6 2、类和对象 6 1前言 6 2类和对象 6 2.1 基本概念 6 2.2类的封装 6 2.3 C++面向对象程序设计举例 6 2.4 作业 6 3对象的构造和析构 6 ...

    C语言中auto,register,static,const,volatile的区别.docx

    C语言中auto,register,static,const,volatile的区别

    C语言中关键字const、static、volatile、extern、auto、register的用法分析.doc

    C语言中关键字const、static、volatile、extern、auto、register的用法分析

    c语言入门教程.txt

    goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while C语言还包括一些不能用做标识符的扩展关键字。 asm cdecl _cs _ds _es far huge ...

    C语言讲义.doc

    1.6 C语言自定义名字的要求 15 1.7 PRINTF函数 15 1.8 RETURN语句 15 1.9 SYSTEM系统调用 15 1.9.1 System返回值在windows和unix下的不同, 15 1.9.2 POSIX 15 1.10 C语言编译过程,GCC参数简介 16 1.10.1 C语言编译...

    谭浩强 入门c语言教程

    1 C语言概述 2 1.1 C语言的发展过程 2 1.2 当代最优秀的程序设计语言 2 1.3 C语言版本 2 1.4 C语言的特点 3 1.5 面向对象的程序设计语言 3 ...8.9.4 register变量 22 8.9.5 用extern声明外部变量 23

    谭浩强c语言程序设计

    8.9.4 register变量 122 用extern声明外部变量 123 9 预处理命令 9.1 概述 124 9.2 宏定义 125 9.2.1 无参宏定义 126 9.2.2 带参宏定义 127 9.3 文件包含 128 9.4 条件编译 130 9.5 本章小结 10 指针 10.1 地址指针...

    C语言编译出错信息详解

    C语言编译出错信息详解 致命错误: 1.bad call of in-line function 内部函数非法调用 在使用一个宏定义的内部函数时,没有正确调用。一个内部函数以双下划线(__)开始和结束。 2.irrducible expression tree ...

    C语言解析教程(原书第4版)(美) 凯利.pdf

    5.11.3 register存储类型 5.11.4 static存储类型 5.12 静态外部变量 5.13 默认初始化 5.14 递归 5.15 例子:汉诺塔 5.16 总结 5.17 练习 第6章 数组、指针和字符串 6.1 一维数组 6.1.1 初始化 6.1.2 下标 6.2 指针 ...

    C语言程序设计-C语言的基本符号与词汇.pptx

    C语言的基本符号与词汇 大小写英文字母,各26个。 阿拉伯数字0-9,共10个。 其他特殊符号 空格 !# % ^ & * - + = ~ < > / \ | ....程序中用来标识变量名、...register short case float default double if struc

    谭浩强 C语言程序设计 教程全书 Word版

    8.9.4 register变量 22 8.9.5 用extern声明外部变量 23 9 预处理命令 1 9.1 概述 1 9.2 宏定义 1 9.2.1 无参宏定义 1 9.2.2 带参宏定义 4 9.3 文件包含 8 9.4 条件编译 9 9.5 本章小结 11 10 指针 1 10.1 地址指针的...

    谭浩强版c语言程序设计

    8.9.4 register变量 122 用extern声明外部变量 123 9 预处理命令 9.1 概述 124 9.2 宏定义 125 9.2.1 无参宏定义 126 9.2.2 带参宏定义 127 9.3 文件包含 128 9.4 条件编译 130 9.5 本章小结 10 指针 10.1 地址指针...

    C语言中auto register static const volatile 区别

    C语言中auto register static const volatile 区别

    C语言关键字详解

    C语言关键字详解,很全面,希望能给大家带来帮助。

    C语言复习题目

    A) default B) register C) enum D) external 【1.6】C语言程序从main()函数开始执行,所以这个函数要写在____。 A) 程序文件的开始 B) 程序文件的最后 C) 它所调用的函数的前面 D) 程序文件的任何位置 【1.7】...

Global site tag (gtag.js) - Google Analytics