还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编程语言欢迎来到《编程语言》课程本课程将带您探索各种编程语言的世界,从基础概念到高级应用我们将学习不同编程语言的特点、优势和应用场景,帮助您建立坚实的编程基础无论您是编程新手还是有经验的开发者,本课程都将为您提供系统的知识框架,帮助您理解计算机语言的本质和进化历程,以及如何选择合适的编程语言来解决特定问题课程目标和大纲掌握编程语言基础概念1理解什么是编程语言,如何工作,以及不同类型的编程语言之间的区别掌握编程语言的基本组成部分,包括语法、语义和结构了解主流编程语言2深入学习C、C++、Java、Python、JavaScript等主流编程语言的特点和适用场景,能够根据不同的项目需求选择合适的编程语言培养实践能力3通过实例和练习,培养实际编程能力学习调试技巧、代码优化和最佳实践,能够编写高效、可维护的代码拓展前沿技术视野4了解新兴编程语言和技术趋势,包括人工智能、大数据、云计算相关的编程技术,为未来的技术发展做好准备什么是编程语言?人机交流的桥梁规则和语法系统问题解决工具编程语言是人类与计每种编程语言都有其编程语言本质上是解算机交流的媒介,它特定的语法规则和结决问题的工具通过允许我们用结构化的构,定义了如何正确编程,我们可以创建方式向计算机发出指编写代码这些规则各种应用程序,自动令通过编程语言,决定了变量如何声明化任务,分析数据,我们可以将人类的思、函数如何定义、以甚至控制硬件设备,维逻辑转化为计算机及程序如何组织实现从简单计算到复能够理解和执行的形杂系统的各种功能式编程语言的发展历史早期机器语言(1940s-1950s)1最早的编程直接使用二进制机器码,程序员需要手动输入0和1这种方式极其繁琐且容易出错,但直接对应计算机的硬件操作2汇编语言时代(1950s)汇编语言引入了助记符,使程序员可以使用如ADD、MOV等指令代替二进制码,大大提高了编程效率,但仍然与特定硬件平台紧密相关高级语言兴起(1950s-1970s)3FORTRAN、COBOL和C等高级语言的出现,使编程更加接近人类语言,提高了可读性和可移植性这一时期奠定了现代编程语言的基础4面向对象时代(1980s-1990s)C++、Java等面向对象语言流行起来,引入了类、继承等概念,更好地支持大型软件开发,提高了代码的复用性和可维护性互联网和脚本语言(1990s-2000s)5随着互联网发展,JavaScript、PHP等脚本语言兴起,同时Python等易用语言逐渐流行,降低了编程门槛6现代多范式语言(2000s至今)现代语言如Go、Swift、Rust等结合了多种编程范式,注重性能、安全性和开发效率的平衡,适应云计算、移动开发等新场景编程语言的分类按执行方式分类按编程范式分类编译型语言(如C、C++)与解释型语言(如Python、命令式(如C)、面向对象(如按抽象级别分类JavaScript)编译型语言先转Java)、函数式(如Haskell)换为机器码再执行,解释型语言、逻辑式(如Prolog)等不同的按应用领域分类低级语言(机器语言、汇编语言边解释边执行编程思想和方法论)与高级语言(如C++、Java、通用语言(如Python、Java)Python)低级语言更接近硬与专用语言(如SQL用于数据库件,高级语言更接近人类思维操作,R用于统计分析)专用语言针对特定领域优化2314低级语言高级语言vs低级语言高级语言低级语言直接对应计算机硬件操作,包括机器语言(二进制高级语言更接近人类思维和自然语言,抽象层次高,隐藏了)和汇编语言它们执行效率高,对硬件控制精确,但编程大量硬件细节它们提供了丰富的数据结构和控制结构,大复杂度高,可移植性差程序员需要关注硬件细节,如寄存大提高了开发效率和代码可读性,且通常具有良好的跨平台器分配、内存管理等特性适合系统编程、嵌入式系统、对性能要求极高的应用场景适合应用软件开发、网站开发、数据分析等广泛场景代表代表语言汇编语言语言C++、Java、Python、JavaScript等编译型语言解释型语言vs编译型语言解释型语言混合型语言编译型语言需要通过编译器将源代码一解释型语言通过解释器逐行解释执行源一些现代语言采用混合模式,结合编译次性转换为机器码,然后执行优点是代码优点是开发周期短,调试方便,和解释的优点例如Java,先将源代码执行效率高,运行速度快;缺点是开发跨平台性好;缺点是执行效率相对较低编译为字节码,再由虚拟机解释执行或调试周期长,跨平台性较差(需要针对现代解释型语言通常采用即时编译即时编译为机器码这类语言兼顾了开不同平台重新编译)代表语言C、JIT技术提升性能代表语言Python发效率和执行性能,且具有良好的跨平C++、Go等、JavaScript、Ruby等台特性常见编程语言概览当今编程世界中存在数百种编程语言,每种语言都有其特定的设计目的和优势C/C++在系统编程和性能关键应用中占据重要地位;Java以其跨平台特性和企业级应用支持而广泛使用;Python因其简洁易学和丰富的库生态系统而流行于数据分析和人工智能领域;JavaScript主导着Web前端开发;而Go、Rust、Swift等新兴语言则在各自的领域展现出独特优势选择编程语言应考虑项目需求、团队经验、性能要求、生态系统和长期维护等因素掌握多种语言能够让开发者更灵活地应对不同挑战语言简介C核心特点C语言是一种通用的、过程式的编程语言,由Dennis Ritchie于1972年在贝尔实验室开发它具有高效、可移植、功能强大且灵活的特点C语言允许直接内存操作和低级系统访问,同时提供高级语言的抽象能力主要应用操作系统开发(如Unix、Linux内核)、嵌入式系统编程、系统工具和实用程序、性能关键型应用程序任何需要精确控制硬件和内存的场景都适合使用C语言优缺点•优点执行效率高,内存占用小,直接访问硬件能力•缺点安全性挑战(如内存泄漏),缺乏现代编程特性影响力C语言奠定了现代编程语言的基础,影响了众多后续语言如C++、Java、C#等它的语法和概念仍然是计算机科学教育的核心部分语言简介C++发展历程C++由Bjarne Stroustrup于1979年开始设计,初名为C withClasses,旨在为C语言添加面向对象特性1985年首次商业发布,此后经历多次标准化(C++
98、C++
11、C++
14、C++
17、C++20等),不断增加新特性和改进语言特性C++是一种多范式编程语言,支持过程式、面向对象和泛型编程它保持了与C语言的兼容性,同时提供了类、继承、多态、模板、异常处理等高级特性C++保留了对系统底层的访问能力,同时提供了高层抽象工具应用领域游戏开发(游戏引擎如Unreal Engine)、高性能系统软件、实时系统、嵌入式系统、图形处理软件、金融交易系统等任何需要高性能和系统级访问能力的场景都能见到C++的身影优势与挑战优势高性能、灵活性、完全控制内存和系统资源挑战学习曲线陡峭、复杂性高、安全性问题(如内存管理错误)现代C++标准努力解决这些挑战,提供更安全、更简洁的编码方式语言简介Java起源与设计理念Java由Sun公司(现为Oracle)的James Gosling等人于1995年发布,设计初衷是一次编写,到处运行(Write Once,Run Anywhere)Java通过其虚拟机(JVM)实现了平台无关性,程序可在任何支持Java的设备上运行核心特性Java是一种纯面向对象的编程语言,强调安全性、可靠性和可移植性它自动管理内存(垃圾回收),提供强类型检查,支持多线程并发,具有丰富的标准库和APIJava消除了指针,减少了内存错误的可能性应用领域企业级应用开发(如银行、金融系统)、Android移动应用、Web服务端开发、大数据处理(Hadoop)、嵌入式系统(如智能卡、机顶盒)等Java的生态系统庞大,拥有大量成熟框架如Spring、Hibernate等演进与未来Java持续进化,从早期版本到现在的Java17(LTS),引入了lambda表达式、模块系统、记录类型等现代特性,不断改进性能和开发体验尽管面临其他语言的竞争,Java仍然是企业级应用的主要选择之一语言简介Python简洁易用1清晰可读的语法,几乎如同伪代码丰富的库生态2NumPy,Pandas,TensorFlow等领域专用库多范式支持3面向对象、函数式、命令式编程广泛的应用领域4从Web开发到科学计算、AI强大的社区支持5活跃开发者和学习资源Python由Guido vanRossum于1991年创建,以其简洁的语法和代码可读性著称作为一种解释型、高级编程语言,Python强调代码的可读性和简洁性,使开发者能够用更少的代码表达复杂思想其设计哲学优雅、明确、简单使其成为初学者最友好的编程语言之一Python在数据分析、机器学习、人工智能、Web开发、自动化脚本等领域广泛应用它的电池已包含理念提供了丰富的标准库,同时第三方库生态系统极其繁荣,大大提高了开发效率语言简介JavaScript跨平台扩展网页交互核心通过Node.js扩展到服务器端,实现全栈2作为Web前端开发的核心语言,使网页从静态JavaScript开发1变为动态交互异步编程模型基于事件驱动和回调机制,支持非阻塞I/O操3作持续快速演进5生态系统繁荣通过ECMAScript标准定期更新,不断增强语言特性4拥有npm这一全球最大的包管理系统,框架丰富多样JavaScript由Brendan Eich在1995年仅用10天创建,最初仅作为给Netscape浏览器添加简单交互效果的脚本语言但如今,它已发展成为世界上应用最广泛的编程语言之一JavaScript是一种动态类型、基于原型的多范式语言,支持面向对象、命令式和函数式编程风格从简单的网页交互扩展到服务器开发Node.js、移动应用React Native、桌面应用Electron甚至物联网开发,JavaScript的应用范围不断扩大现代JavaScript开发生态包括React、Vue、Angular等前端框架,以及Express、NestJS等后端框架,形成了完整的开发体系编程语言的基本组成部分词法元素1关键字、标识符、运算符、分隔符等基本单元数据类型与变量2基本数据存储和操作的机制表达式与语句3执行计算和操作的基本结构控制结构4决定程序执行流程的机制函数与模块5代码组织和重用的基本单位无论哪种编程语言,都由这些基本组成部分构建而成词法元素是语言的最小构建块,包括关键字(如if、while、for)、标识符(变量和函数名)、运算符(+、-、*、/)和分隔符(括号、逗号等)数据类型和变量提供了存储和处理信息的机制,可以是整数、浮点数、字符串等简单类型,也可以是数组、对象等复合类型表达式和语句构成了程序的执行单元,控制结构(条件、循环)决定了程序的执行路径,而函数和模块则提供了代码的组织和重用机制了解这些基本组成部分是掌握任何编程语言的基础变量和数据类型什么是变量?变量是程序中用于存储数据的命名内存位置编程中的变量类似于数学中的变量,但可以存储各种类型的数据,并且其值可以在程序执行过程中改变变量通常需要先声明(指定名称和类型),然后才能使用基本数据类型•整数型(int)存储整数值•浮点型(float/double)存储小数值•字符型(char)存储单个字符•布尔型(boolean)存储真/假值复合数据类型•字符串(string)字符序列•数组(array)同类型数据的集合•对象(object)属性和方法的集合•指针存储内存地址的变量类型系统特性不同编程语言的类型系统各异静态类型(编译时类型检查)vs动态类型(运行时类型检查);强类型(禁止隐式类型转换)vs弱类型(允许隐式类型转换);值类型vs引用类型理解这些差异对掌握特定语言至关重要运算符和表达式运算符类型示例说明算术运算符+,-,*,/,%用于基本数学计算关系运算符==,!=,,,=,=比较两个值,返回布尔结果逻辑运算符,||,!对布尔值进行操作赋值运算符=,+=,-=,*=,/=给变量赋值位运算符,|,^,~,,对二进制位进行操作特殊运算符:,.,-,[]条件、成员访问等特殊操作表达式是由变量、常量和运算符组合而成的计算公式,用于产生一个值表达式可以简单如单个变量或常量,也可以复杂如多个运算符和操作数的组合表达式的计算遵循优先级规则,如乘除优先于加减,括号内的表达式优先计算等大多数编程语言支持表达式的嵌套,即表达式内可以包含其他表达式了解运算符优先级和结合性对于正确编写和理解复杂表达式至关重要不同编程语言的运算符可能有细微差别,但基本概念是一致的控制结构顺序结构顺序执行的基本原理顺序结构是最简单的程序控制结构,指令按照它们在程序中出现的顺序一条接一条地执行这是所有编程语言的基本执行模式,代码从上到下、从左到右顺序执行,除非遇到改变控制流的语句语句与语句块语句是程序执行的基本单位,通常以分号或换行结束语句块是多条语句的集合,在大多数语言中使用花括号{}或缩进来定义顺序结构中,语句块内的语句从上到下依次执行表达式语句表达式语句由表达式和终止符组成,如赋值表达式(a=b+c;)、函数调用(printHello;)、自增/自减表达式(i++;)等这些是顺序结构中最常见的语句类型顺序结构的应用顺序结构适用于那些需要按特定顺序执行一系列操作的场景,如初始化变量、进行简单计算、准备数据等即使是复杂程序,其核心也是由顺序执行的代码块构成,只是增加了条件和循环等控制结构控制结构选择结构语句语句语句if if-else switch-caseif语句是最基本的选择结构,根据条件if-else结构提供了二选一的执行路径switch语句用于多分支选择,基于一个表达式的真假来决定是否执行特定代码当条件为真时执行if分支,为假时执行表达式的值选择多个代码块之一执行块语法通常为if条件{执行代码}else分支这确保了在任何情况下都会适用于需要针对某个变量的不同值执行条件为真时执行代码块,为假时跳过执行两个分支之一,适用于需要在两种不同操作的场景与多个if-else相比,这是实现程序决策逻辑的基础可能性间选择的场景switch通常更清晰且可能更高效控制结构循环结构循环循环for while1适用于已知迭代次数的场景适用于迭代次数未知的场景2迭代器循环foreach/4do-while3简化集合元素遍历确保至少执行一次循环体循环结构是编程中实现重复执行代码的机制for循环通常用于确切知道需要执行多少次的场景,如遍历数组;语法通常包含初始化、条件测试和迭代表达式while循环适用于不确定重复次数的场景,只要条件为真就继续执行;do-while循环则确保循环体至少执行一次现代编程语言还提供foreach或迭代器循环,专为遍历集合对象设计,语法更简洁循环控制语句如break(跳出循环)和continue(跳过当前迭代)可以精细控制循环执行流程嵌套循环(循环内包含循环)可以处理多维数据结构,但需注意性能影响函数和模块化编程函数的本质函数定义与调用函数是执行特定任务的代码块,可以接收参数、执行操作并返回结果函数函数定义包括函数名、参数列表、返回类型和函数体函数调用通过函数名是代码重用的基本单位,通过将复杂问题分解为较小的功能单元,实现了分和参数值激活函数执行不同语言的函数语法略有差异,但核心概念相似而治之的编程思想函数使代码更有组织性、更易维护和测试现代语言支持函数重载、默认参数、可变参数等高级特性模块化编程作用域和生命周期模块化编程将程序分解为独立、可重用的模块,每个模块封装特定功能模变量的作用域决定了它在程序中的可见性范围局部变量只在函数内部可见块可以是函数集合、类库或包,通过导入/导出机制在程序间共享模块化提,全局变量在整个程序中可见理解作用域和变量生命周期对避免命名冲突高了代码组织性、复用性和维护性,是大型软件开发的关键实践和内存泄漏很重要闭包是现代语言中的重要概念,允许函数访问其词法环境数组和集合数组列表集合数组是最基本的数据结构,存储列表是动态大小的序列容器,可集合存储唯一元素,没有特定顺同类型元素的有序集合,通过索以在任何位置高效地插入和删除序主要操作包括添加、删除、引访问数组可以是一维(向量元素与数组不同,列表通常通检查元素是否存在集合常用于)、二维(矩阵)或多维的数过链接结构实现(如链表),提需要快速查找和去重的场景实组的优点是访问效率高(常数时供了更灵活的内存管理,但元素现方式通常基于哈希表或平衡树间),缺点是大小通常固定,插访问可能较慢(线性时间),提供高效的查找和插入操作入和删除操作可能效率低映射映射(字典/哈希表)存储键值对,通过键访问值映射结构广泛用于数据索引和缓存实现通常基于哈希函数或平衡树,提供高效的查找、插入和删除操作字符串处理字符串的本质常见字符串操作正则表达式字符串是字符的有序序列,是处理文•连接(拼接两个或多个字符串)正则表达式是描述字符串模式的强大本数据的基本结构不同语言对字符工具,用于搜索、匹配和替换文本•截取(提取子字符串)串的实现有所不同有些语言(如C)它们提供了复杂文本处理的简洁解决•查找(定位子串或字符位置)将字符串表示为字符数组,以空字符方案,但学习曲线较陡不同编程语•替换(用新内容替换部分字符串)结尾;而其他语言(如Java、Python言通常有内置的正则表达式支持,语)提供专门的字符串类型,支持丰富•分割(将字符串拆分为数组)法基本相似的内置操作•大小写转换正则表达式广泛应用于表单验证、数•去除空白字符编码是字符串处理的关键概念,据提取、文本解析和格式化等场景包括ASCII、Unicode(UTF-
8、UTF-•格式化(按模板生成字符串)熟练掌握正则表达式可以大大提高文16等)正确处理编码对于国际化应本处理效率用尤为重要面向对象编程概念多态1同一接口,不同实现继承2子类获得父类特性封装3隐藏实现细节,暴露必要接口抽象4识别对象的核心特性类与对象5模板与实例的关系面向对象编程(OOP)是一种基于对象概念的编程范式,这些对象包含数据和代码面向对象思想将现实世界建模为相互交互的对象集合,每个对象都是类的实例,类是对象的模板或蓝图,定义了对象的属性(数据)和方法(行为)封装是隐藏对象内部细节的机制,通过访问修饰符(如private、protected、public)控制对属性和方法的访问继承允许创建扩展现有类的新类,子类继承父类的属性和方法,同时可以添加新功能或覆盖现有功能多态使不同类的对象可以对相同消息做出不同响应,通常通过方法重载和方法覆盖实现面向对象编程是Java、C++、Python等主流语言的核心范式类和对象类的定义对象实例化构造函数类是创建对象的蓝图或模板,定义对象是类的实例,代表程序中的具构造函数是创建对象时自动调用的了一组具有共同属性和行为的对象体实体通过实例化过程创建对象特殊方法,用于初始化对象状态类通常包含属性(成员变量或字,通常使用特定语法如new关键字构造函数通常与类同名,可以重载段)和方法(成员函数),可能还实例化时会分配内存,初始化对以支持不同方式的对象初始化良包括构造函数、析构函数和其他特象状态,并返回对新创建对象的引好的构造函数设计能确保对象创建殊方法类的设计应遵循单一职责用每个对象都有自己的状态(属后处于有效状态,防止使用未初始原则,即一个类应该只有一个改变性值),但共享其类定义的行为(化的对象的理由方法)访问控制访问修饰符(如private、protected、public)控制类成员的可见性和访问权限适当的访问控制有助于实现封装,保护对象内部状态,并提供清晰的公共接口不同编程语言对访问控制的支持略有不同,但核心概念相似继承和多态单继承1一个类只从一个父类继承多继承2一个类可从多个父类继承接口实现3实现指定接口的契约方法覆盖4子类重新定义父类方法动态绑定5运行时确定调用的实际方法继承是面向对象编程中实现代码重用的主要机制,允许定义类层次结构子类(派生类)继承父类(基类)的属性和方法,并可扩展或修改这些特性继承表达了是一种的关系,如猫是一种动物不同语言对继承的支持有所不同Java和C#支持单继承(一个类只能有一个父类),而C++支持多继承(一个类可以有多个父类)多态允许使用统一接口处理不同类型的对象,是面向对象编程的核心特性之一多态主要通过方法覆盖(子类重新实现父类方法)和动态绑定(运行时确定调用哪个方法版本)实现多态提高了代码的灵活性和可扩展性,允许编写能处理未来可能出现的新类型的代码封装和抽象封装的实现抽象的意义信息隐藏封装是隐藏对象内部细节并提供受控访抽象是识别对象的本质特性,忽略非本信息隐藏是封装的核心原则,指的是对问的机制通过将数据成员声明为私有质细节的过程在编程中,抽象通过定使用者隐藏不必要的实现细节通过提(private),并提供公共(public)方法义类的接口(可访问的方法和属性)来供明确定义的接口,组件之间的依赖被来访问和修改这些数据,实现了数据隐实现,而隐藏具体实现细节良好的抽最小化,使得组件可以独立开发和修改藏这种方式能控制对数据的访问,确象简化了复杂系统,使开发者能够在适,而不影响其他部分这提高了代码的保数据完整性,并防止外部代码直接修当的抽象级别思考问题,而不被实现细模块性和可维护性,是软件工程中的关改对象状态节分散注意力键原则接口和抽象类接口抽象类接口与抽象类的比较接口定义了类应实现的方法签名集合抽象类是不能实例化的类,用作其他•目的接口定义能做什么,抽象,是一种契约,规定类必须提供哪些类的基类它可以包含抽象方法(没类定义是什么功能,但不规定如何实现接口只包有实现的方法)和具体方法(有实现•实现接口不包含实现,抽象类可含方法声明和常量定义,不包含方法的方法)抽象类提供了部分实现,包含部分实现实现或实例变量接口支持多重实现定义了子类的框架,强制子类实现特•继承多个接口可以实现,但只能,即一个类可以实现多个接口定方法继承一个抽象类(在单继承语言中)接口用于定义对象之间的交互协议,抽象类通常用于表示是一种关系中的使不相关的类可以通过共同接口交互一般概念,如动物是一个抽象概念,•变量接口通常只有常量,抽象类,从而实现多态性在Java中使用而猫是一个具体实现不同语言使用可有实例变量interface关键字,而在C#中使用不同语法定义抽象类Java和C#使用•访问修饰符接口方法通常是公开interface,在Python中通过抽象基类abstract关键字,C++使用纯虚函数,的,抽象类方法可有不同访问级别和协议实现类似功能Python使用ABC模块异常处理异常的概念异常是程序执行过程中发生的不正常情况,如除以零、访问不存在的文件、内存不足等异常处理机制允许分离正常代码与错误处理代码,使程序更清晰、更健壮大多数现代编程语言提供了内置的异常处理支持异常的捕获与处理使用try-catch-finally结构捕获和处理异常try块包含可能引发异常的代码;catch块指定要捕获的异常类型和处理逻辑;finally块包含无论是否发生异常都要执行的清理代码异常处理应遵循具体到一般的原则,先捕获特定异常,后捕获一般异常异常的抛出使用throw语句(或类似机制)主动抛出异常,通常在检测到程序无法正常继续时使用可以抛出预定义异常或自定义异常方法应在文档中声明可能抛出的异常(某些语言如Java强制要求通过throws声明)良好的异常设计有助于调用者理解和处理可能的错误情况异常设计与最佳实践创建适当的异常层次结构,区分不同类型的错误仅在异常情况下使用异常,不要用异常控制正常程序流程提供有意义的错误消息和上下文信息考虑性能影响,异常处理可能较慢某些语言区分检查异常和非检查异常,分别用于可恢复和不可恢复的错误文件操作和I/O文件基本概念文件是存储在持久性存储媒体上的数据集合文件操作是大多数程序的基本功能,包括读取、写入、创建、删除文件等文件路径指定文件在文件系统中的位置,可以是绝对路径(从根目录开始)或相对路径(相对于当前目录)文件读写操作文件读写通常遵循打开-操作-关闭模式打开文件时指定模式(如只读、只写、追加等)读操作从文件获取数据,写操作向文件发送数据现代语言提供缓冲I/O以提高性能,减少实际的系统调用次数读写完成后必须关闭文件以释放资源,许多语言提供自动关闭机制(如Java的try-with-resources)文本文件与二进制文件文本文件包含可读的字符数据,通常使用特定的字符编码(如UTF-8)文本处理需要考虑换行符(Windows使用CR+LF,Unix使用LF)和字符编码问题二进制文件包含原始数据字节,不进行任何转换,适用于图像、音频等非文本数据处理二进制文件通常需要了解数据的具体格式I/O流与序列化I/O流抽象了数据传输,分为输入流(读取数据)和输出流(写入数据)流可以链接形成处理管道,如先解压再解码序列化是将对象转换为字节序列以便存储或传输的过程,反序列化则是相反的过程序列化广泛用于网络通信、持久化存储和分布式计算内存管理内存分配垃圾回收手动内存管理内存优化技术程序运行时需要为变量、对象和数据自动内存管理机制,负责识别和回收某些语言(如C、C++)要求程序员内存池管理复用固定大小的内存块,结构分配内存内存分配方式根据语不再使用的内存现代语言如Java、显式管理内存,通过malloc/free或减少分配/释放操作对象缓存保存言而异静态分配(编译时确定)、Python、JavaScript等实现了垃圾回new/delete等操作手动内存管理提常用对象以避免重复创建内存压缩栈分配(函数调用时自动分配和释放收,减轻了程序员的内存管理负担供了更精确的控制,但容易出现内存技术如位域减少内存占用内存泄漏)和堆分配(动态分配,程序员或垃常见的垃圾回收算法包括引用计数、泄漏(未释放不再使用的内存)和悬检测工具帮助识别未释放的内存这圾收集器负责释放)不同类型的数标记-清除、复制收集等垃圾回收挂指针(访问已释放的内存)等问题些技术对资源受限环境(如嵌入式系据通常存储在不同内存区域降低了内存泄漏和悬挂指针错误的风现代C++引入了智能指针等工具简统)或高性能应用尤为重要险,但可能引入性能开销化内存管理。
个人认证
优秀文档
获得点赞 0