CPU的精简指令集与复杂指令集之我见

article/2025/10/10 20:33:09

CPU的精简指令集与复杂指令集之我见

作者:老九—技术大黍

社交:知乎

公众号:老九学堂(新人有惊喜)

特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权

前言

我们经常会看到大学生在学习C/C++时经常会被问到这样的语法:

6C(CFWQ)8ST_NQ2@YU74O%5.png

问:Sum的结果打印出来是多少?

image-20210331102942474.png

这种烧脑壳的问题,除了大学时的C/C++专业课程会被问到之外,我们面试C/C++岗位也会必然遇到此类问题。

image-20210331103420850.png

a++和++a与什么有关

image-20210331104021089.png

百度出来都是与编译器有相关的答案。当然,上面的答案不准确,应该是与g++命令才能把上面的代码编译通过。

下面我们来动手做一下试验证明到底与什么编译器有什么关系!

源代码

#include <iostream>
int main(int argc, char** argv){int a = 1, sum;sum = (++a)+(++a)+(++a);printf("%d",sum);return 0;
}

g++编译器

image-20210331104638096.png

所以,我们准备使用咪咕编译器编译运行后结果是

image-20210331104837214.png

按照C/C++的教课书讲解的语法,它应该是9啊~ 但是实际使用g++编译器运行的结果不是我们想要的预期结果。

cl编译器

使用VS 2019创建一个控制台项目

image-20210331105333325.png

按F5键调试运行如下

image-20210331105435759.png

预期结果=9

修改源代码

#include <iostream>
int main(int argc, char** argv){int a = 1, sum;int x = ++a, y = ++a, z=++a;sum = x + y + z;printf("%d",sum);return 0;
}

g++编译器

image-20210331110405570.png

cl编译器

image-20210331110503152.png

两种写法的区别

sum = (++a)+(++a)+(++a);
  • 这种写法一看上去会觉得很抽象,符合代码要抽象的概念。但是,对一般不人不友好。
  • 到处都这样写,有装逼的嫌疑。因为,其实它很难调试。
 int x = ++a, y = ++a, z=++a;sum = x + y + z;
  • 这种写法很啰嗦,但是表达概念清晰。
  • 总是这样写,让人不会觉得有技术含量样式(对很多来说,就是没有逼格),但是实用啊。

那么问题来了,我们现在知道了,在我们C/C++源代码中,如果大量使用复杂指令后,结果是会让编译器犯晕的,那编译器犯晕与什么有关呢?

image-20210331112457539.png

编译器与什么有关

我记得上大学学习计算机组成原理时,老师讲过CPU的类型是根据指令集类型来分类的,它分为两种:

  • 复杂指令集CPU
  • 精简指令集CPU

早期计算机的CPU都是复杂指令集,所以C/C++为了适应硬件而发明了++和--的运算符,像(++a)+(++a)+(++a)这种语法就是刚好匹配复杂指令集CPU的语法,这种语法非常适合在上古时代只有很小内存时代的代码存贮机制,它占用空间小,并且CPU解析速度快,所以它们能够在64K的程序运行空间中高效运算和稳定运行。

但是,当今的CPU都是精简指令集的类型,像

int x = ++a, y = ++a, z=++a;
sum = x + y + z;
复制代码

这样语法清楚,显示比较啰嗦的语法,才是非常匹配现在的CPU硬件运行要求的:

  • 解析速度比复杂指令快
  • 运行速度比复杂指令快

所以,我们现在写代码时就不要学什么老鸟去装什么逼了,我们强烈建议:大家还是老老实实的、一步一个步骤的、语意清楚的来书写C/C++源代码吧。

image-20210331112728067.png

总结

通过这个示例说明一个一直存在问题:计算机软件与硬件永远都不可能分开的!

也衷心祝愿在校大学生,特别是计算机和与计算机相关专业的大学生,在学校一定要好好学习自己的专业课程啊。虽然,我们在学校看到它有用,但是有一天我们进入IT行业后,我们就会发现:曾经我们在大学认为没有什么卵用的东西,现在真的是非常有用!

当然,以上观点仅代表我个人自己,如果有不足之处,请大家指正和补充。希望能够帮助到现在和我在学校曾经学过。

最后

记得给大黍❤️关注+点赞+收藏+评论+转发❤️

作者:老九学堂—技术大黍

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 


http://chatgpt.dhexx.cn/article/1LS0Tixh.shtml

相关文章

计算机系统结构的分类-复杂指令集系统CISC与精简指令集系统RISC

在计算机系统结构发展的过程中&#xff0c;指令系统的优化设计有两个截然相反的方向&#xff0c;一个是增强指令的功能&#xff0c;设置一些功能复杂的指令&#xff0c;把一些原来由软件实现的、常用的功能改用硬件的指令系统来实现&#xff0c;这种计算机系统称为复杂指令系统…

复杂指令集与精简指令集的原子操作

复杂指令集与精简指令集的原子操作 以a的动作为例&#xff1a; 在精简指令集下&#xff0c;这个加法操作不是原子的&#xff0c;包括多个汇编步骤&#xff0c;典型的情况包括3个步骤&#xff1a;ldr、add、str&#xff0c;即读取内存数据到CPU寄存器&#xff0c;修改数据&…

浅谈RISC CPU(精简指令集处理器)

目前的处理器中&#xff0c;一般分为CISC和RISC两大系列&#xff0c;CISC&#xff08;复杂指令集处理器&#xff09;中常用的指令集只占源代码的20%&#xff0c;剩余的80%不常用。 为了改变这种不合理&#xff0c;出现了RISC即精简指令集处理器。其通道中只包含最有用的指令&a…

ARM处理器 CISC(复杂指令集)与RISC(精简指令集)

博文背景&#xff1a; 最近想学习一些树莓派的知识&#xff0c;便看了一本书《树莓派开始&#xff0c;玩转Linux》&#xff0c;在阅读此书的时候&#xff0c;顺便把其中不懂的知识重新梳理一些&#xff0c;算是作为自己的读书笔记了。 有感兴趣的同学&#xff0c;可以一起研究学…

计算机为什么要采用精简指令集,为什么说手机cpu运行的是精简指令集,而电脑cpu是复杂指令集?...

iris_eyes 回答数&#xff1a;216 | 被采纳数&#xff1a;100 2018-11-07 08:33:27 计算机发展分两个方向&#xff0c;一个是朝海量存储和高性能方向发展。另一个是向低功耗&#xff0c;微型化发展(手机也可以算作是一种计算机)。这是两个完全相反的发展趋势&#xff0c;海量…

精简指令集(RISC)和复杂指令集(CISC)的区别

RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构&#xff0c;x86是CISC的代表架构&#xff0c;占领了95%以上的桌面计算机和服务器市场。Arm作为RISC的一种&#xff0c;在智能手机、可穿戴设备等移动处理器市场占领主要地位。 它们的区别在于不同的CPU设计…

精简指令集与复杂指令集

精简指令集与复杂指令集对比 补充&#xff1a; 时钟周期&#xff1a; 一个时钟脉冲所需要的时间。在计算机组成原理中又叫 T 周期或节拍脉冲。是 CPU 和其他单片机的基本时间单位。 机器周期&#xff1a;通常用从内存中读取一个指令字的最短时间来规定 CPU 周期&#xff08;机…

一文读懂,CPU、精简指令集、复杂指令集该如何理解?

大家好&#xff0c;我是七七。欢迎来到我们的频道&#xff0c;一起见证ARM架构的崛起。 如今&#xff0c;芯片相关的话题广受关注&#xff0c;我们经常会听到芯片、CPU架构、ARM架构、芯片研发等相关内容。CPU、指令集、架构、微架构、芯片&#xff0c;这一组概念很容易混淆&am…

精简指令集(MIPS为例)常用指令特点及其格式

精简指令集&#xff08;MIPS为例&#xff09;常用指令特点及其格式 一、指令集 指令集是指一台计算机的全部指令&#xff1b;不同的计算机有不同的指令集&#xff0c;但是在许多方面都有共同之处。早期的计算机有非常简单的指令集&#xff1a;实现简单&#xff0c;许多现代计…

精简指令集

精简指令集编辑risc&#xff08;精简指令集&#xff09;一般指精简指令集 本词条缺少 信息栏&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来 编辑吧&#xff01; RISC的英文全称是Reduced Instruction Set Computer&#xff0c;中文是精简指…

Centos7 连接wifi (PEAP)

1 注意连接的wifi 2 安全中的设置&#xff0c;按照下图 3 有问题&#xff0c;记得reboot重启一下&#xff01;

802.1x EAP(证书)、PEAP(证书、EAP-MSCHAP v2)认证配置(NPS、组策略)

802.1x EAP(证书) NPS 组策略 PEAP&#xff08;证书、EAP-MSCHAP v2&#xff09; NPS 组策略按需配置&#xff0c;下图是PEAP证书

Android Wifi连接 (PEAP)

Wifi PEAP方式的连接与Android的版本有很大关系&#xff0c;三个大的差别对应的版本分别是4.3以下&#xff0c;4.3到6.0之间&#xff0c;以及6.0以上&#xff0c;现在就基于版本分析。 如果要连接wifi&#xff0c;那么得创建WifiConfiguration 版本4.3以下&#xff0c;需要采…

AP与mAP的详解

AP和mAP是图像分类任务中的评价方法。 mAP的计算方法&#xff1a; 1、首先使用训练好的模型获得所有测试样本的confideutnce score&#xff0c;每个类别&#xff08;如person、car等&#xff09;都会获得一组confidence score&#xff0c;假设现在共有20个测试样本&#xff0…

AP,mAP

AP&#xff08;Average Precision&#xff09; AP (Average precision)是主流的目标检测模型的评价指标。 定义&#xff1a;平均精度&#xff0c;就是对PR曲线上的Precision值求均值&#xff0c;即PR曲线下的面积。 由于IoU有三种计算方式&#xff0c;对应地&#xff0c;AP也…

RADIUS 服务器之 hostapd 配置说明

RADIUS 服务器之 hostapd 配置说明 本文提供了企业级加密的 RADIUS 服务器配置环境搭建&#xff0c;供读者参考。 一. 安装 hostapd $ sudo apt-get install libnl1 libnl-dev libnl-doc $ sudo apt-get install libssl-dev $ sudo apt-get install bridge-utils $ sudo ap…

EAP-TLS/EAP-TTLS/EAP-PEAP

原文&#xff1a;http://blog.chinaunix.net/uid-26422163-id-3457357.html IEEE的802.1X使用了EAP认证框架&#xff0c;因为EAP提供了可扩展的认证方法&#xff0c;但是这些认证方法的安全性完全取决于具体的认证方法&#xff0c;比如EAP-MD5、EAP-LEAP、EAP-GTC等&#xff0c…

peaks

文章目录 语法说明示例 peaks:包含两个变量的示例函数 语法 Z peaks; Z peaks(n); Z peaks(V); Z peaks(X,Y); peaks(...) [X,Y,Z] peaks(...);说明 peaks 是从高斯分布转换和缩放得来的包含两个变量的函数&#xff0c;在演示 mesh、surf、pcolor、contour 等函数中很有…

Radius协议、EAP协议、EAP-MSCHAPv2、EAP-TLS、EAP-TTLS和EAP-PEAP

1. Radius协议 Radius协议是目前AAA服务中所使用的最广泛的协议&#xff0c;它对认证&#xff0c;授权以及计费的功能都提供支持。Radius服务器通过建立一个唯一的用户数据库&#xff0c;存储用户名&#xff0c;用户密码等一系列信息&#xff0c;接入用户通过发送自己的用户名…

使用 freeradius 搭建 EAP PEAP MS-CHAPv2 验证环境

企业级 Wi-Fi 搭建起来有点小复杂&#xff0c;我们知道自己家使用的 Wi-Fi 非常简单&#xff0c;几乎只需要配置一下热点的 SSID 和密码就可以了&#xff0c;实际上这是两种 Wi-Fi 认证类型。想要快速部署企业级 Wi-Fi 验证环境&#xff0c;首先要理解企业级 Wi-Fi 部署的一些核…