0

0

为什么C代码比Python的运行速度更快?

PHPz

PHPz

发布时间:2023-09-11 12:45:02

|

1488人浏览过

|

来源于tutorialspoint

转载

为什么c代码比python的运行速度更快?

在本文中,我们将了解为什么 C 语言代码运行速度比 Python 更快。

Guido Van Rossum 开发了 Python,这是最著名的编程语言之一。 Python因其清晰的语法和简单的代码而受到开发人员的欢迎,即使对于新手来说也是如此。学习Python对于那些刚刚开始编程职业生涯的人来说是非常有利的。他们可以使用 Python 编程培训、博客、视频、模块和数千种其他资源来了解这种流行语言的各个方面。完成后,您将能够进行现代开发活动,例如 GUI 开发、网页设计、系统管理、复杂的金融交易或计算、数据科学、可视化等等。

Python 比 C 慢,因为它是一种解释语言。

Python 比 C 慢,因为它是一种解释性语言。

因此,需要更多真实的 CPU 指令来执行给定的语句。

立即学习Python免费学习笔记(深入)”;

您可以通过在 Python 代码中添加数字 1 或将其与给定值进行比较来验证变量的值是否小于、大于或精确等于该值。

不同之处在于,Python 代码不会立即由 CPU 执行,而是会被解释。

就性能而言,这使世界变得与众不同。

几乎总是使用虚拟机来运行 Python 代码

虚拟计算机的另一个名称是“字节码解释器”。

解释代码总是比实际机器代码慢,因为它需要比执行实际机器指令更多的指令来实现指令。

示例

考虑表达式 x += 1。在 Intel CPU 中,寄存器增量是单个操作,延迟为 1,吞吐量倒数为三分之一 (1/3)。

换句话来说,它指的是英特尔处理器可以提供的最快的CPU指令。

在Python中,x += 1是如何实现的?

要理解这一点,您必须首先了解 Python 内部是如何工作的。

Python 的内部组件包括分词器、词法分析器、字节码生成器和字节码解释器 -

  • Tokenizer - 它根据给定的 ASCII 文本文件(Python 代码)创建令牌流。

  • 词法分析器 - Python 的这个区域涉及适当的缩进和间距。此时进行语法检查。

  • 字节码生成器 - 如果进行了任何优化,则它们是由 Python 组件进行的;但是,由于 Python 不是编译语言,因此与 C 编译器相比,可用优化的范围受到限制。

  • 被称为“字节码解释器”的 Python 模块管理字节码流并为 Python 虚拟机提供动力(维护其状态)。

    Khroma
    Khroma

    AI调色盘生成工具

    下载

字节码一旦生成,通常会缓存在内存中。

因为您不必对 Python 已经见过的代码重复标记化、词法分析和字节码生成过程,所以这提高了速度。

因此,我们不必每次循环 while 循环时都经历标记化、词法分析和字节码创建过程,而是可以继续将字节码传递给字节码解释器。

这不是更快吗?不,实际上并非如此。

虽然使用缓存的字节码速度更快,但它的执行或操作速度不如机器代码。

运行代码的真实CPU不是虚拟计算机。

编译过程

编译型 UCSD Pascal 与当时的其他编译语言不同,并未编译为汇编语言。相反,它被编译成 p 代码。

因此,当您想到“编译的 Pascal 程序”时,您会想到 p-Code。如果您喜欢 Java 或 Python 并且想假装您想出了一些新东西,请使用“字节码”。

此外,Python 还包括“编译的 Python”的概念,它指的是经过分词器、词法分析器和字节码生成器处理以创建可提供给字节码解释器的缓存字节码的 Python 代码(又名 Python 虚拟机)。

当您看到扩展名为.py的文件时,它是一个包含Python源代码的ASCII文本文件。

PYthon,已编译是带有“.pyc”扩展名的文件所代表的内容。

仍然,虚拟计算机执行创建的代码。

本机代码

程序一旦构建完成,就不会完全转换为本机代码,直到它被转换为其设计平台的本机二进制 CPU 指令。

这通常涉及编写汇编代码,将其传递给汇编器,然后让汇编器创建特定于平台的目标文件,而不是使用字节码。

在程序连接到平台运行时之前,它尚未准备好使用。运行时可以提供动态对象加载等运行时服务并构建代码执行的环境。在已编译的 C 中,存在运行时。已编译的C++具有运行时。

为什么Python比C慢?

  • Python 执行大量的健全性检查 - 整数永远不会溢出,无效内存永远不会被访问,类型永远不会(默默地)不正确,并且数组永远不会超出其末端进行写入或读取。在 Python 中,很难出现“非本地错误”,但在 C 中,出现并非实际报告错误的错误是相当常见的。

  • Python 的编译器不会进行非常高级的优化(如果有的话) - 一方面,速度不像 C 中那么重要,而且没有那么多信息可以继续 - 例如,在 Common Lisp(另一种像 Python 一样的动态语言)中,您可以提供类型注释以获得与 C 相同的速度 - 如果您选择退出安全检查并承诺某些变量将具有某些类型,您将获得完全相同的机器代码指令(如果你的程序中有错误,也会出现完全相同的奇怪行为)。

结论

在本文中,我们了解了 C 语言代码执行速度比 Python 更快的不同原因。

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

107

2023.09.25

常见的编码方式
常见的编码方式

常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

648

2023.10.24

a和A对应的ASCII码数值
a和A对应的ASCII码数值

a的ascii码是65,a的ascii码是97;ascii码表中,一个字母的大小写数值相差32,一般知道大写字母的ascii码数值,其对应的小写字母的ascii码数值就算出来了,是大写字母的ascii码数值“+32”。想了解更多相关的内容,可阅读本专题下面的相关文章。

2261

2024.10.24

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

48

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

88

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

270

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

59

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

99

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

105

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号