【C语言】理解最快的关键字:register 和 寄存器的地位

这篇具有很好参考价值的文章主要介绍了【C语言】理解最快的关键字:register 和 寄存器的地位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. register & 寄存器

register int a = 10;
被register修饰的变量会被***建议***存放在寄存器中,但只是建议,主要还是由操作系统决定。

寄存器是一种造价很高、读写速度很快的存储设备。

存储设备 空间大小
寄存器(regs) 4byte,CPU通常集成几十个寄存器
高速缓存(cache) 128M,CPU通常集成集成多个高速缓存
内存(memory) 4G/8G/16G/32G等
固态硬盘(SSD) 常见有256G/512G/1T大小等
机械硬盘(HHD) 通常比SSD更大
网盘 通常以T为单位
光盘 -
磁带 -

读写速度越快,造价就越高,空间大小就越小;或者可以这么说,离CPU越近的存储设备,速度越快,如寄存器和高速缓存就是集成在CPU中的。

运算操作都是由CPU完成,如果说变量直接就是存放在寄存器中,那么等于说直接在CPU内进行运算操作,不用从内存甚至是硬盘中读取,这就是速度快的原因。在硬件层面上,提高计算机的运算效率。

小插曲:放在百度网盘中的文件,如果你不经常使用它,那就会被百度网盘放在廉价的网盘设备中,这就是为什么经常使用的文件下载/访问速度更快的原因。

2. 什么样的变量可以采用register呢?

  1. 局部的变量(全局会导致CPU寄存器被长时间占用);

  2. 不会被写入的(写入就需要写回内存,写入的意思就是变量被二次赋值了,也就是被修改值了,这时CPU要对变量进行运算操作修改值,然后将其写回内存);

  3. 高频被读取的(提高效率所在);

3. 使用register的误区

  1. 注意不要大量使用,因为寄存器数量有限,一般修饰一两个、两三个就够了。但事实上现在的编译器已经足够聪明,经常被使用的变量,编译器会主动将其放入寄存器准备使用,所以我们一般不用管。

  2. register修饰的变量不能取地址,这是因为变量已经放在寄存区中了,而地址是内存的概念(内存地址)。文章来源地址https://www.toymoban.com/news/detail-734657.html

到了这里,关于【C语言】理解最快的关键字:register 和 寄存器的地位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言深度剖析——第四节(关键字4)】《C语言深度解剖》+蛋哥分析+个人理解

    追求本质,不断进步 本文由@睡觉待开机原创,转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 前言: 本节博客继续前篇内容进行续写,我们着重探求有符号与无符号数的问题,探求 整形在内存中的存储 这一课

    2024年01月20日
    浏览(34)
  • kotlin sealed关键字理解

    Kotlin中的\\\"sealed\\\"用于声明一个\\\"密封类\\\"(sealed class)。密封类是一种特殊的抽象类,用于限制可以继承它的子类。 密封类的主要特点是,它的子类必须定义在与密封类相同的文件中,这样做可以保证只有有限的类可以继承密封类。这种限制能够提供更好的代码可读性和

    2024年02月12日
    浏览(29)
  • 正确理解c# default关键字

    最近QA测试一个我开发的一个Web API时,我意识到之前对C#的 default 的理解一直是 想当然 的。具体情况是这样,这个API在某些条件下要返回模型的默认值,写法类似于下面这样 实际上,这个API会返回 204 No Content ,而不是想象中的一个空的WeatherForecast。API返回204,说明 default 得

    2024年01月16日
    浏览(34)
  • asyncio中await关键字的理解

    在  asyncio  中, await  用于暂停当前异步函数的执行,直到其后的协程(coroutine)完成执行并返回结果。一旦协程完成, await  表达式会返回该协程的结果,并且异步函数会从这个点继续执行。 多个  await  表达式会按照它们在代码中的顺序依次执行。这意味着,如果

    2024年02月21日
    浏览(25)
  • 面向对象编程:深入理解抽象类和关键字

    在Java编程中,我们经常会遇到一些特殊的和概念,其中包括static、final以及抽象类等。本文将深入探讨这些和概念的作用和使用方法,并通过一个实例展示抽象类的应用。 1. 1.1 static static修饰成员变量:表示该成员变量属于类,不属于对象,所有对象共享

    2024年02月15日
    浏览(38)
  • C理解(五):编译,链接库,宏,关键字,变量

    编译          编译过程                 文件.c-(预处理)-文件.i-(编译)-文件.S-(汇编)-文件.o-(链接)-elf程序          预处理                 内容:加载头文件(#include),清除注释(//,./*),替换条件编译(#if #elif #endif    #ifdef),替换宏定义(#define)           

    2024年02月07日
    浏览(35)
  • this关键字和同步异步宏认为微任务理解

    目录 js面试常见问题:1.this指向  2.闭包定义和作用 3.原型链 4.异步协程 this this主要有以下几个使用场合。 1)全局环境 (2)构造函数 (3)对象的方法 避免多层this 避免数组处理方法中的 this 避免回调函数中的 this 绑定 this 的方法 Function.prototype.call() Function.prototype

    2024年02月15日
    浏览(39)
  • 深入理解C#泛型:new与where关键字全解析

    C#泛型中new和where是重要的,它们都可以用于约束泛型类型参数的限制;它们都用于提高代码的安全性和可用性,它们的作用在很大程度上提高了代码的可读性和可维护性。在这篇文章中,我们将一起了解泛型中的new和where,以及它们之间的区别。 1. new 在C#泛型中

    2023年04月25日
    浏览(27)
  • 深入理解C++中的静态(Static)关键字及其应用场景

    在C++中,静态(Static)是一个常见且重要的概念,用于描述变量、函数和类成员。它具有独特的特性和作用域,可以在不同的应用场景中发挥重要作用。本文将详细讨论C++中的静态,包括静态变量、静态函数和静态类成员,并对其与全局变量之间的区别进行分析

    2024年02月09日
    浏览(34)
  • 【C语言】for 关键字

    🚩WRITE IN FRONT🚩    🔎介绍:\\\"謓泽\\\"正在路上朝着\\\"攻城狮\\\"方向\\\"前进四\\\"🔎 🏅荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TOP100|TOP63、阿里云专家博主、掘金优秀创作者、全网粉丝量5w+、全网访问量70w+🏅 🆔本文章内容由 謓泽 原创 如需相关转载

    2023年04月17日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包