温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++寄存器怎么优化

发布时间:2021-11-24 10:24:35 来源:亿速云 阅读:118 作者:iii 栏目:互联网科技

本篇内容主要讲解“C++寄存器怎么优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++寄存器怎么优化”吧!

C++寄存器优化

在C++里面有个有趣的现象,先看代码

#include<iostream>
using namespace std;
int main()
{
 int const tmp = 100; //定义常量tmp tmp不能修改
 int const* p = &tmp; //不能通过指针修改指向的值 
 int* const q = const_cast<int*>(p); //去常属性 可以通过指针修改指向的内容
 *q = 200;
 cout << tmp << " " << *p << " " << *q << endl; //打印变量的值
 cout << &tmp << endl << p << endl << q << endl; //打印变量地址
 return 0;
}
 
打印结果
100 200 200
0086F9D0
0086F9D0
0086F9D0
 

what? 什么,地址一样,打印结果不一样,不是应该一样的吗!!!

既然标题是 C++ 寄存器优化,那么就要从寄存器出发去考虑。

「当定义常量时」

int const tmp = 100; //定义常量tmp tmp不能修改
 

我们就相当于和编译器约定好了,我们不会去修改 tmp 的值,这个时候编译器就会做一个优化,将 tmp 的值,放到寄存器里面,然后读取 tmp 时直接在寄存器里面读取,加快读取速度。

这个时候我们有去常属性 const_cast ,通过变量 q 修改 tmp 在内存中的值

int* const q = const_cast<int*>(p); //去常属性 可以通过指针修改指向的内容
*q = 200;
 

在打印结果时,tmp 读取的是「寄存器」的值,p ,q读取的是「内存」的值

cout << tmp << " " << *p << " " << *q << endl; //打印变量的值
 
C++寄存器怎么优化  
 

解决方案 volatile

上面这种优化肯定程序员所不愿意看到的,所以C++有一个关键字来解决这种不期望的优化问题,那就是 volatile ,英文翻译:「易变的; 无定性的」; 其实就是告诉编译器这个关键字修饰的变量不安全,你要到内存里面去操作,不要直接从寄存器取值。

volatile int const tmp2 = 100;
volatile int const* pm = &tmp2;   //不能通过指针修改指向的值 
int* const qm = const_cast<int*>(pm); //q本身只读  指向读写 
*qm = 200;
cout << tmp2 << " " << *pm << " " << *qm << endl;
cout << (void*)&tmp2 << endl << (void*)pm << endl << qm << endl;
打印结果:
200 200 200
007CFDDC
007CFDDC
007CFDDC

到此,相信大家对“C++寄存器怎么优化”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI