C++寄存器怎么优化
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容主要讲解"C++寄存器怎么优化",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++寄存器怎么优化"吧!C++寄存器优化在C++里面有个有趣的现象,
千家信息网最后更新 2025年02月03日C++寄存器怎么优化
本篇内容主要讲解"C++寄存器怎么优化",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++寄存器怎么优化"吧!
C++寄存器优化
在C++里面有个有趣的现象,先看代码
#include
using namespace std;
int main()
{
int const tmp = 100; //定义常量tmp tmp不能修改
int const* p = &tmp; //不能通过指针修改指向的值
int* const q = const_cast(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(p); //去常属性 可以通过指针修改指向的内容
*q = 200;
在打印结果时,tmp 读取的是「寄存器」的值,p ,q读取的是「内存」的值
cout << tmp << " " << *p << " " << *q << endl; //打印变量的值
解决方案 volatile
上面这种优化肯定程序员所不愿意看到的,所以C++有一个关键字来解决这种不期望的优化问题,那就是 volatile ,英文翻译:「易变的; 无定性的」; 其实就是告诉编译器这个关键字修饰的变量不安全,你要到内存里面去操作,不要直接从寄存器取值。
volatile int const tmp2 = 100;
volatile int const* pm = &tmp2; //不能通过指针修改指向的值
int* const qm = const_cast(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++寄存器怎么优化"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
寄存器
C++
变量
指向
内容
指针
结果
内存
属性
常量
编译器
编译
关键
关键字
可以通过
地址
就是
时候
学习
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南通推广网络技术服务价格
委托软件开发研发合同
信息技术 网络安全手抄报
js省市区数据库
广西广电玉林 网络技术员
access数据库安装包pdf
php 折线图保存数据库
河北系统软件开发机构
软件开发的前沿科学技术
上海朔羡网络技术有限公司
h5视频免费服务器上传
json 数据库操作
MYSQL数据库技术学校
软件开发项目成本表格模板
plsql 复制数据库
ff14豆豆柴服务器名称
数据库占内存
银联商务软件开发面试
视觉对位软件开发源码
域服务器端口
刘连康网络安全教学视频
物竞数据库氯化镁
国际版服务器显示连接超时
手机显示服务器异常怎么修复
网络安全物理威胁
我局开展网络安全岗位技能培训
奥运网络安全日活动
软件开发的要求和流程图
数据库中改变初始空间大小
黑龙江特种网络技术服务代理商