C 的简单概念
一、c 的特性
1.运行高效
- 1.cpu的运行
- 我们都知道 cpu 的工作状态就是高速的运行指令,它的性能取决于 运行指令的速度、存库指令的数量…… ,cpu 只能读懂 0和1 组成的机器码指令,
- 而基本的运算语言就有 编译性语言和解释性语言。举个最典型的例子 C Java Python,他们分别是 编译性语言、半编译半解释性语言、解释性语言。
- CPU工作原理 … …
- 2.编译性语言 :
- 由编译器将
高级语言转化为机器语言,过程是先编译,编译完成后一次性运行。由于程序在运行前已经全部编译完成,所以明显速度会更快。 - 它的特点就很明显,执行效率高。跨平台性稍微差一点。
- C、 C++ 、golang 都是编译性语言
- 3.解释性语言 :
- 或者叫做直译性语言更为合适吧,由解释器将代码一句一句运行。
- 执行效率低一点,跨平台性好一点。
- Java、C#、PHP、JavaScript、VBScript、 Perl、Python、Ruby、MATLAB
- 4.理解
- 看到了这里我们明白了,为啥c的运行效率,相对于很多其他语言要高。
- 这里再来理解,为什么编译性语言的跨平台性 不如解释性语言。首先我们要理解一个概念:不是某个语言自身的问题,而是他们编写的程序的跨平台性怎样?
- 编译性的语言的跨平台性需要依赖编译器。C和C++的源码是跨平台的,但是编译后的目标文件 .tar(linux)/ 可执行文件 .exe(windows),就不是跨平台的了。如linux上的 .tar 文件是不能在 windos 上直接运行的因为操作系统不一样。
- 所以说编译性语言不是不可以跨平台,而是它的跨平台需要各个平台上的编译器支持啊。
- 而向
java这种,跨平台那就轻松了。自身内置的JVM虚拟机 + JDK 。不受到操作系统的限制。java 的跨平台考得就是虚拟机。 - 它的运行过程简单写一下:我们先去编译写好的
java源文件.java文件,然后生成中间文件.class也就是字节码文件。最后通过JVM虚拟机的转换。再将.class文件翻译成可以被各平台识别运行的文件。 - 正是应为
java自己的jvm虚拟机做了这件事情而没有依靠各平台的,我们才说它的跨平台型好。 - 就像别人说的一样 c是一次编写(源码一次编写完成),到处编译。而 java 是一次编译,到处运行。jvm起到了一个桥梁的作用,它将java直接放置了在了一个自己制造的平台上了,jvm牛皮。
5.知识补充
上面我们通过解释为什么 C运行高效,进而对编译性语言和解释性语言进行了一个划分。
- 有时候我们也用 其他的名词对这些计算机语言进行划分。 如 XX是脚本语言 是弱类型语言 是动态语言 等等。哈哈,我说的就是 js 和 php 这样的。
5.1 高级语言和低级语言
常见低级语言:机器语言、汇编语言
- 常见高级语言:太多了…… C , C++, C#, go, Java, js ,ts, ruby,swift,python,perl
- 机器语言就是 目前计算机唯一指定合作伙伴,可直接识别,无论你用的一言有多么牛逼反正都要转换成二进制
- 汇编语言的话作为 二代目 用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,在不同的设备中有着不同的指令集。代码量比全是机器语言的代码量可少多了。
- 区别:高级语言不能直接和硬件打交道,这会让程序损失部分运行速度,但更贴近人性化,代码量少,可读性强,利于维护开发效率高。
5.2 静态语言和动态语言 / 强类型语言和弱类型语言
动态语言就是程序运行时才会最终给变量绑定数据类型,而静态语言就会要求我们再编写时就必须制定变量的数据类型。
- 所以说 静态语言通常也可以强类型语言,动态语言也可以叫做弱类型语言。
- 很明显静态语言设计的更为严谨,执行的效率会更好,但用起来不如动态语言来的方便来的爽。
- 最常见的 静态原因 C, C++ ,Java 最常见的 动态语言/脚本 js php oython ruby
