【C++】register 关键字

简介: 我们都知道,CPU主要是负责进行计算的硬件单,但是为了方便运算,一般第一步需要先把数据从内存读取到CPU内,那么也就需要CPU具有一定的数据临时存储能力(CPU并不是当前要计算了,才把特定数据读到CPU里面,那样就太慢了)。

一. 什么是寄存器?

我们都知道,CPU主要是负责进行计算的硬件单,但是为了方便运算,一般第一步需要先把数据从内存读取到CPU内,那么也就需要CPU具有一定的数据临时存储能力(CPU并不是当前要计算了,才把特定数据读到CPU里面,那样就太慢了)。


现代CPU内,都有集成一组叫做寄存器和高速缓存(Cache)的硬件,用来做临时数据的保存。


4b9a2191f8594952ba0a6f034e4cae17.png


二. 为什么要存在寄存器?

寄存器的存在是为了在硬件层面上,提高计算机的运算效率。这样通过预先缓存,CUP就不需要每次都从内存里读取数据了。



三. register 修饰变量

register 只能修饰局部变量,其作用是尽量将所修饰变量,放入CPU寄存区中,从而达到提高效率的目的。


那么什么样的变量,可以采用 register 呢?


首先这个变量必须是局部的(全局会导致CPU寄存器被长时间占用)


5b163e64b922462ebc2207f264a21314.png

被高频被读取且不会写入的(写入就需要写回内存,后续还要读取检测的话,register 的意义在哪呢?)


PS:该关键字,现在已经不会有人在使用了,因为现在的编译器,已经很智能了,能够进行比人更好的代码优化(会自动识别给需要的变量加上 register )。早期编译器需要人为指定 register,来进行手动优化,现在不需要了。


相关文章
|
22天前
|
存储 安全 编译器
【C++专栏】C++入门 | auto关键字、范围for、指针空值nullptr
【C++专栏】C++入门 | auto关键字、范围for、指针空值nullptr
27 0
|
2月前
|
编译器 程序员 API
【C++ auto推导】C++中的auto关键字及其推导规则
【C++ auto推导】C++中的auto关键字及其推导规则
59 0
|
2月前
|
安全 编译器 程序员
【C++ 修饰符关键字 explicit 】掌握C++中的explicit :构造函数行为和初始化综合指南
【C++ 修饰符关键字 explicit 】掌握C++中的explicit :构造函数行为和初始化综合指南
113 3
|
2月前
|
存储 安全 算法
【C/C++ 关键字 函数说明符 】C++ noexcept 关键字(指定某个函数不抛出异常)
【C/C++ 关键字 函数说明符 】C++ noexcept 关键字(指定某个函数不抛出异常)
27 0
|
2月前
|
设计模式 算法 安全
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
【C/C++ 关键字 函数说明符 】C++ final关键字(修饰成员函数无法被子类重写覆盖)
40 1
|
2月前
|
算法 安全 编译器
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
27 0
|
2月前
|
算法 Java 编译器
【C++ 关键字 virtual 】C++ virtual 关键字(将成员函数声明为虚函数实现多态
【C++ 关键字 virtual 】C++ virtual 关键字(将成员函数声明为虚函数实现多态
27 0
|
3天前
|
C语言 C++
【C++入门】关键字、命名空间以及输入输出
【C++入门】关键字、命名空间以及输入输出
|
22天前
|
C++
|
23天前
|
存储 编译器 Linux
【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)
【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)