C++、python、Java的运行过程对比

前言

        要了解三种语言的运行过程,我们先要知道什么是源代码、目标代码、机器码;什么是编译、解释以及什么是静态语言、动态语言。如有不对的地方,欢迎小伙伴们指出来,我会及时进行更正!也欢迎各位小伙伴在评论区进行讨论~

什么是源代码、目标代码、机器码?

        源代码就是程序员直接编写出来的代码。

        目标代码是源代码经过编译器或汇编器处理后生成的中间代码,它是由特定的指令集和格式组成,并不能直接在计算机上运行。

        机器码是计算机可以直接执行的二进制指令。它是由0和1组成的二进制数,对应于计算机硬件的指令集。目标代码需要通过链接器将其与其他目标代码以及库文件等链接在一起,最终生成可以在计算机上运行的可执行文件,这时候才会将目标代码转化为机器码。

什么是编译、解释?

        举个例子,小明想去书店买《哈利·波特》,有两种选择,一是买中文版的《哈利·波特》,另一种选择是买英文版(假设他爸妈为了方便他学习英语给他配了一个英语翻译老师)。

        如果买了中文版,那他就不再需要原版的《哈利·波特》,而且可以一次性读完中文版,甚至也不需要英语老师进行解释如果买了英文版,那这个时候英语翻译老师的工作就是一边阅读《哈利波特》的英文版的同时一边解释给小明听。

        上述的例子中,出版《哈利·波特》中文版的翻译者就是编译器,而英语翻译老师就是解释器。所谓编译,就是将源代码一次性转换为目标代码,也就是一次性翻译,之后就不需要源代码。所谓解释,就是将源代码逐条转换为目标代码,同时逐条运行,运行时随翻译随执行,是需要源代码的!(不然英语翻译老师对照什么讲述呢?)。

什么是静态语言、动态语言?

        静态语言就是使用编译器执行的编程语言,动态语言就是使用解释器执行的编程语言!

        有了上面的知识基础,我们再来看看 C++、Java、python运行过程的对比!

 C++的运行过程

  1. 编写C++源代码,保存为.cpp文件。
  2. 使用C++编译器(gccclang等)将C++源代码编译成机器码,生成可执行文件。
  3. 运行生成的可执行文件。

Java的运行过程

  1. 编写Java源代码,保存为.java文件。
  2. 使用Java编译器(javac)编译Java源代码,生成字节码文件(.class)。
  3. 使用Java虚拟机(Java Virtual Machine,JVM)加载字节码文件,并执行。

        注:字节码文件不能直接执行,因为它包含了Java虚拟机(JVM)能够理解的指令和结构,而不是直接CPU可以执行的指令。因此,需要JVM作为中间层解析并执行这些字节码指令,她会将字节码翻译成可以执行的机器码!当然它也提供了其他很多功能,比如内存管理,垃圾回收、异常处理等,Java就是通过JVM提供的一致性接口才使Java程序具有跨平台性的!

        为什么要有JVM,是不是多此一举? 别忘了,Java的诞生,本身就是为了解决不同平台上的差异性的~~

Python的运行过程

  1. 编写Python源代码,保存为.py文件。
  2. 使用Python解释器执行Python源代码,即时解释并执行。

三者的区别和联系

JavaC++python
语言设计和语法静态类型语言静态类型语言动态类型语言
编译和解释编译型语言编译型语言解释型语言
平台依赖性通过JVM实现跨平台针对不同平台需要不同编译器不同平台
性能次之最高较低

        注:这个性能对比结果是因为C++在编译时会经过一系列优化,而Java和Python会在运行时进行一些额外的解释、优化等操作。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rust、Python和Golang是三种不同的编程语言,各有优缺点,下面是它们的详细优劣对比: Rust: 优点: 1. 静态类型、内存安全和高性能的编程语言,具有类似于C和C++的底层控制; 2. 可以保证线程安全,支持并行和异步编程; 3. 内存管理方面比C++更安全,有许多内存安全功能,如所有权和借用,可避免内存泄漏和数据竞争; 4. 社区活跃,有许多有用的库和工具。 缺点: 1. 学习曲线较陡峭,需要花费一定时间学习所有权和借用等概念; 2. 语言特性较多,代码量相对较大; 3. 由于语言特性的限制,Rust可能不适合开发一些大型复杂系统。 Python: 优点: 1. 简单易学,语法简洁,可以快速开发原型; 2. 具有强大的标准库和第三方库,可以处理各种任务; 3. 支持多种编程范式,如面向对象、函数式和面向过程编程; 4. 可读性好,常被用于教学和科学计算。 缺点: 1. 速度比较慢,不适合实时性要求高的场景; 2. Python的代码执行效率低于C++Java语言; 3. 由于动态类型的限制,Python不太适合大型复杂系统的开发。 Golang: 优点: 1. 静态类型语言,编译速度快,运行速度也很快; 2. 支持并发和并行编程,有goroutine和channel等特性; 3. 语法简洁,易于阅读和维护; 4. 适合构建高性能和可伸缩的网络应用程序。 缺点: 1. 内存管理方面不如Rust安全; 2. 语言特性相对较少,不如其他语言功能丰富; 3. 在处理一些密集计算或科学计算方面,Golang的性能可能不如其他专业的语言。 综合来看,选择哪种语言取决于具体的需求和场景。如果需要高性能和内存安全,可以选择Rust;如果需要快速原型开发和科学计算,可以选择Python;如果需要高并发和可伸缩的网络应用程序,可以选择Golang。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值