HttpClient实现原理深度解析

引言

在当今互联网时代,网络通信已经成为各种应用程序不可或缺的一部分。而HttpClient作为一个强大的网络通信库,在现代网络编程中扮演着至关重要的角色。本文旨在深度解析HttpClient的实现原理,以帮助读者更好地理解其工作机制,从而提升网络编程能力。

作用与重要性

HttpClient是一个用于发送HTTP请求和接收HTTP响应的工具,它提供了一种简单而灵活的方式来进行网络通信。通过HttpClient,开发人员可以轻松地与各种Web服务进行交互,从而实现数据的传输与交换。无论是在Web开发、移动应用开发还是服务器端编程中,都可能会用到HttpClient来进行网络通信,因此它在现代软件开发中具有极其重要的地位。

应用场景

HttpClient在各种应用场景中都有着广泛的应用,其中包括但不限于:

  • Web应用程序的服务端与客户端通信:例如,通过HttpClient可以实现Web应用程序与后端API服务之间的数据传输,包括获取数据、提交表单、上传文件等操作。
  • 移动应用程序的网络请求:在移动应用开发中,HttpClient被广泛用于与服务器进行数据交互,包括获取远程资源、更新应用内容、进行用户身份验证等。
  • 后台服务之间的通信:在分布式系统中,各个服务之间通常需要进行相互通信以完成各自的任务,HttpClient提供了一种便捷的方式来实现服务之间的通信。

博客目的和内容概览

本博客的目的在于深入探讨HttpClient的实现原理,帮助读者全面了解它的工作机制和内部组成,从而更好地应用于实际开发中。具体内容包括:

  • HttpClient基础知识:介绍HttpClient的定义、特性以及与其他HTTP工具的对比。
  • HttpClient的工作流程:详细解析HttpClient在发送请求、接收响应过程中的工作流程,包括请求的构建、连接的建立、数据传输等。
  • HttpClient的核心组件:深入分析HttpClient中的核心组件,包括HttpClient类、HttpMessage、HttpContext等。
  • HttpClient的高级特性:探讨HttpClient的一些高级特性,如请求配置、异常处理与重试策略、拦截器等。
  • HttpClient性能优化:介绍如何对HttpClient进行性能优化,包括连接池优化、资源利用与释放、并发与线程管理等方面的内容。

通过本博客的学习,读者将能够全面了解HttpClient的实现原理及其在实际项目中的应用,从而提升自己在网络编程领域的技能水平。

第一部分:HttpClient基础知识

1.1 什么是HttpClient

HttpClient定义

HttpClient是一个用于发送HTTP请求和接收HTTP响应的工具,它是在Java标准库中提供的一个强大的网络通信库。通过HttpClient,开发人员可以轻松地与各种Web服务进行交互,包括获取数据、提交表单、上传文件等操作。

HttpClient与Http协议的关系

HttpClient是基于HTTP协议的实现,它与HTTP协议密切相关。HTTP协议是一种用于传输超文本数据的应用层协议,它定义了客户端和服务器之间的通信规则。而HttpClient则是在HTTP协议的基础上封装了一系列的操作,使得开发人员可以更方便地进行HTTP通信。

1.2 HttpClient与其他HTTP工具的对比

HttpClient与HttpURLConnection

HttpClient与Java标准库中的HttpURLConnection相比,具有更加灵活和强大的功能。HttpURLConnection是Java标准库中提供的HTTP客户端,但它的功能相对较为简单,使用起来可能不够便捷。而HttpClient则提供了更多的功能和选项,使得开发人员可以更加灵活地控制HTTP请求和响应的过程。

HttpClient与第三方库(如Apache HttpClient, OkHttp等)

除了Java标准库中提供的HttpClient之外,还有许多第三方库可以用来进行HTTP通信,其中比较知名的包括Apache HttpClient和OkHttp等。这些库通常提供了更加丰富和高效的功能,例如连接池管理、异步请求等,使得开发人员可以更加轻松地实现各种复杂的HTTP通信需求。

1.3 HttpClient的主要特性

支持的HTTP方法(GET, POST, PUT, DELETE等)

HttpClient支持常见的HTTP方法,包括GET、POST、PUT、DELETE等,可以满足各种不同的HTTP请求需求。

自动管理持久连接(HTTP Keep-Alive)

HttpClient能够自动管理持久连接,通过HTTP Keep-Alive机制来减少连接的建立和关闭次数,从而提高性能和效率。

支持同步与异步模式

HttpClient既支持同步模式,也支持异步模式。在同步模式下,请求会阻塞直到收到响应;而在异步模式下,可以通过回调或Future等方式来处理响应,从而实现非阻塞的请求处理。

异常处理和重试机制

HttpClient提供了完善的异常处理和重试机制,能够有效地处理网络异常、超时等情况,并根据需要进行重试,保证请求的可靠性和稳定性。

第二部分:HttpClient的工作流程

2.1 请求的构建过程

在HttpClient中,请求的构建是一个关键步骤,它包括以下几个主要过程:

  • 创建HttpRequest对象:首先,需要创建一个HttpRequest对象来表示即将发送的HTTP请求。HttpRequest是HttpClient中用于表示HTTP请求的抽象类,它包含了请求的方法、URI、Headers等信息。

  • 配置请求参数(Headers, Body等):接下来,需要根据具体的需求配置请求的参数,包括请求头部信息(Headers)、请求体(Body)等。通过设置请求头部,可以传递诸如User-Agent、Content-Type等信息;而请求体则用于传输POST请求中的数据。

  • URI和编码处理:在构建请求过程中,还需要对URI进行处理,包括URL编码、参数拼接等操作。URI表示统一资源标识符,它用于标识请求的资源位置。在构建请求时,需要将URI与请求参数进行合适的编码处理,以确保请求的准确性和完整性。

2.2 连接的建立

连接的建立是HttpClient中的一个关键环节,它包括以下几个步骤:

  • DNS解析:首先,需要根据请求的主机名(域名)进行DNS解析,将主机名解析为对应的IP地址。DNS解析是将域名转换为IP地址的过程,它是建立网络连接的第一步。

  • TCP连接:接下来,需要建立TCP连接到目标服务器。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它通过三次握手建立连接,确保数据的可靠传输。

  • SSL/TLS握手(HTTPS):对于使用HTTPS协议的请求,还需要进行SSL/TLS握手过程,建立安全的加密连接。SSL/TLS是一种用于加密通信的协议,它通过证书交换和密钥协商等步骤,确保通信过程中的数据安全性和完整性。

2.3 请求的发送与响应的接收

一旦连接建立完成,就可以开始发送请求并接收响应了。这个过程包括以下几个步骤:

  • 序列化请求数据:首先,需要将HttpRequest对象中的请求数据进行序列化,将其转换为字节流的形式。这包括了将请求头部、请求体等数据按照一定的格式进行编码和序列化的过程。

  • 网络传输:接下来,将序列化后的请求数据通过网络传输到目标服务器。这涉及到数据的发送、接收和处理等过程,包括了数据的分段、传输和重组等操作。

  • 响应数据的反序列化:一旦服务器接收到请求并处理完成后,会返回相应的响应数据。客户端需要将接收到的响应数据进行反序列化,将其解析为HttpResponse对象。HttpResponse包含了响应的状态码、响应头部、响应体等信息。

2.4 连接的复用与关闭

连接的复用与关闭是HttpClient中的一个重要问题,它涉及到连接的管理和资源的释放等方面:

  • Keep-Alive机制:HttpClient通过Keep-Alive机制来管理连接的复用,即在一定时间内保持TCP连接处于打开状态,以便后续的请求复用该连接,从而减少连接建立和关闭的开销。

  • 连接池管理:为了更好地管理连接,HttpClient通常会使用连接池来存储和管理连接对象。连接池可以提前创建一定数量的连接对象,并在需要时从池中获取连接,从而提高连接的复用率和效率。

  • 连接的关闭:当连接不再需要时,需要及时关闭连接以释放资源。HttpClient会自动管理连接的关闭,确保连接在不再使用时被及时释放,从而避免资源浪费和内存泄漏等问题。

第三部分:HttpClient的核心组件

在HttpClient中,有几个核心组件承担着关键的角色,它们包括HttpClient类、HttpMessage、HttpContext和HttpClient的执行器。

3.1 HttpClient类

类结构与主要方法

HttpClient类是HttpClient的核心类,负责执行HTTP请求和接收HTTP响应。其主要方法包括执行HTTP请求、发送HTTP请求、接收HTTP响应等。它提供了丰富的API来处理HTTP请求和响应,包括执行、取消、暂停、恢复等操作。

配置HttpClient实例

HttpClient实例可以通过Builder模式来进行配置,包括设置连接超时、请求超时、代理设置、Cookie管理等。通过配置HttpClient实例,可以灵活地调整HttpClient的行为,以满足不同的需求。

3.2 HttpMessage

HttpRequest与HttpResponse

HttpMessage是HttpClient中的一个重要概念,它表示HTTP消息,包括HTTP请求和HTTP响应。其中,HttpRequest表示HTTP请求,包括请求行、请求头部、请求体等;而HttpResponse表示HTTP响应,包括状态行、响应头部、响应体等。

Headers的处理

HttpMessage中的Headers用于存储HTTP消息的头部信息,包括各种与消息相关的属性和参数。通过Headers,可以设置和获取消息的各种头部信息,如Content-Type、Content-Length等。

3.3 HttpContext

作用与应用场景

HttpContext是HttpClient中的一个重要组件,它表示HTTP请求的上下文环境。HttpContext主要用于管理HTTP请求的上下文信息,包括请求的一些状态、属性和参数等。它在一些场景下非常有用,如在多次请求之间共享某些状态信息等。

与请求的生命周期管理

HttpContext与请求的生命周期密切相关,它在整个请求过程中起着重要作用。HttpContext可以跟踪和管理请求的状态和属性,确保请求在整个生命周期内能够正确地处理和管理。

3.4 HttpClient的执行器

请求执行流程

HttpClient的执行器负责执行HTTP请求,它包括了请求的发送、响应的接收等过程。执行器通过一系列的步骤来执行HTTP请求,包括建立连接、发送请求、接收响应等。

同步与异步执行的差异

HttpClient的执行器支持同步执行和异步执行两种模式。在同步模式下,请求会阻塞直到收到响应;而在异步模式下,可以通过回调或Future等方式来处理响应,从而实现非阻塞的请求处理。异步执行可以提高系统的并发能力和吞吐量,适用于处理大量并发请求的场景。

第四部分:HttpClient的高级特性

HttpClient作为一个强大的网络编程工具,提供了许多高级特性,使得开发人员能够更加灵活地控制和定制网络请求。以下是一些HttpClient的高级特性:

4.1 请求配置(RequestConfig)

超时设置(连接超时、请求超时)

在实际的网络请求中,超时是一个非常重要的考量因素。HttpClient允许开发人员设置连接超时和请求超时,以确保在网络异常或服务器响应缓慢的情况下能够及时地进行超时处理,防止请求长时间阻塞。

代理设置

HttpClient支持设置代理服务器,以便在进行网络请求时通过代理服务器转发请求。这对于需要通过代理服务器进行网络访问的情况非常有用,如在公司内部网络环境下访问外部资源等。

Cookie管理

HttpClient可以自动管理Cookie,包括Cookie的接收、发送和保存等操作。这样,开发人员可以更加方便地处理与服务器之间的会话状态,实现状态保持和登录认证等功能。

4.2 异常处理与重试策略

异常分类

HttpClient定义了丰富的异常类型,用于表示各种可能发生的网络异常情况,如连接超时、请求超时、网络不可达等。通过对异常进行分类和处理,可以更好地应对不同类型的异常情况。

自定义重试策略

在网络通信中,由于网络不稳定或服务器负载过高等原因,可能会出现请求失败的情况。HttpClient允许开发人员定义自己的重试策略,以便在请求失败时进行自动重试,提高请求的成功率和可靠性。

4.3 拦截器(Interceptor)

请求拦截器

HttpClient提供了请求拦截器接口,允许开发人员在发送请求之前对请求进行拦截和修改。这使得开发人员能够在发送请求前添加额外的信息或参数,实现诸如签名认证、请求头部设置等功能。

响应拦截器

类似地,HttpClient还提供了响应拦截器接口,允许开发人员在接收到响应之后对响应进行拦截和处理。这使得开发人员能够在接收到响应后进行统一的错误处理、日志记录等操作。

4.4 异步HttpClient的实现

异步请求的工作原理

HttpClient支持异步请求,可以通过Future或回调模式来处理异步请求的响应。异步请求能够提高系统的并发能力和吞吐量,适用于处理大量并发请求的场景。

事件驱动模型

异步HttpClient的实现基于事件驱动模型,通过注册回调函数来处理异步请求的响应。这种模型能够更好地利用系统资源,提高系统的性能和响应速度。

这些高级特性使得HttpClient成为一个强大而灵活的网络编程工具,能够满足各种复杂的网络编程需求,为开发人员提供了更加便捷和高效的网络编程解决方案。

第五部分:HttpClient性能优化

HttpClient的性能优化是提高网络请求效率和系统吞吐量的关键。通过合理的配置和优化,可以使HttpClient在大规模并发请求和高负载情况下表现更加稳定和高效。

5.1 连接池优化

连接池大小

合理设置连接池大小能够充分利用系统资源,避免连接池过大导致资源浪费,也避免连接池过小导致连接不足。根据系统负载和并发请求量进行调优,确保连接池能够满足系统的需求,同时不会占用过多的资源。

连接过期策略

及时释放空闲连接和过期连接是连接池优化的关键。通过设置合适的连接过期策略,可以定期清理过期连接,防止连接池中出现大量的空闲和过期连接,从而减少资源浪费,提高连接的可用性和效率。

5.2 资源利用与释放

请求/响应体的流管理

在处理大文件或大量数据时,及时释放请求和响应体的流资源是非常重要的。HttpClient提供了流管理的接口和机制,开发人员可以手动管理请求和响应体的流,及时释放资源,避免内存泄漏和资源浪费。

内存和资源的有效管理

合理利用内存和资源是系统性能优化的核心。通过优化数据结构和算法,减少内存消耗和资源占用,可以提高系统的响应速度和稳定性。同时,定期检查和清理无用的资源,如关闭无用的连接、释放占用的内存等,也是性能优化的重要手段。

5.3 并发与线程管理

线程安全问题

在多线程环境下,线程安全是一个需要重点关注的问题。HttpClient提供了线程安全的实现,能够保证在多线程并发访问时不会出现数据竞争和线程安全问题。开发人员可以放心地在多线程环境下使用HttpClient,提高系统的并发能力和稳定性。

异步HttpClient的线程模型

异步HttpClient的线程模型是性能优化的关键之一。通过合理设计线程池和任务调度机制,能够充分利用系统资源,提高系统的并发处理能力。开发人员可以根据系统的特点和需求选择合适的线程模型,实现高效的异步网络请求处理。

这些性能优化技巧能够帮助开发人员充分发挥HttpClient的性能潜力,提高系统的响应速度和稳定性,为用户提供更加流畅和高效的网络服务。

结语

通过本文的深度解析,我们对 HttpClient 的实现原理有了更加全面的了解。HttpClient 在现代网络编程中扮演着至关重要的角色,它不仅是一个强大的 HTTP 客户端工具,还是开发人员处理网络请求的首选之一。

我们从 HttpClient 的基础知识开始,了解了它与 HTTP 协议的关系,以及与其他 HTTP 工具的对比,进而深入探讨了其主要特性,包括支持的 HTTP 方法、自动管理持久连接、同步与异步模式以及异常处理和重试机制等。

在了解了 HttpClient 的基础知识后,我们进一步分析了其工作流程,包括请求的构建过程、连接的建立、请求的发送与响应的接收,以及连接的复用与关闭等关键步骤,从而更好地理解了 HttpClient 在实际网络请求中的工作原理。

接着,我们深入研究了 HttpClient 的核心组件,包括 HttpClient 类、HttpMessage、HttpContext 和 HttpClient 的执行器,从不同角度剖析了其内部实现机制和使用方法。

在了解了 HttpClient 的核心组件后,我们重点探讨了其高级特性,包括请求配置、异常处理与重试策略、拦截器和异步 HttpClient 的实现等,以及如何通过这些高级特性来提升网络编程的效率和灵活性。

最后,我们对 HttpClient 的性能优化进行了详细讨论,包括连接池优化、资源利用与释放,以及并发与线程管理等方面,为开发人员提供了一系列实用的性能优化技巧和建议。

综上所述,深入理解 HttpClient 的实现原理对于提高网络编程能力具有重要意义。通过不断学习和实践,我们可以更好地利用 HttpClient 提供的强大功能,开发出高效稳定的网络应用,为用户提供更加优质的服务体验。

希望本文能够为大家对 HttpClient 的深度了解提供帮助,并激发更多人对网络编程的兴趣和研究。感谢您的阅读!

参考资料

  • 官方文档:

    • Apache HttpClient 5.x 官方文档:https://hc.apache.org/httpcomponents-client-5.1.x/index.html
  • 相关 RFC 文档:

    • RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing:https://datatracker.ietf.org/doc/html/rfc7230
    • RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2):https://datatracker.ietf.org/doc/html/rfc7540
  • 开源社区讨论与实践案例:

    • Apache HttpClient GitHub 仓库:https://github.com/apache/httpcomponents-client
    • Stack Overflow 上与 Apache HttpClient 标签相关的问题:https://stackoverflow.com/questions/tagged/apache-httpclient

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/598342.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贡献思维,CF1644E. Expand the Path

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1644E - Codeforces 二、解题报告 1、思路分析 很容易想明白被…

大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW

近日,由阿里云计算平台大数据基础工程技术团队主导的四篇时间序列相关论文分别被国际顶会ICLR2024、ICDE2024和WWW2024接收。 论文成果是阿里云与华东师范大学、浙江大学、南京大学等高校共同研发,涉及时间序列与智能运维结合的多个应用场景。包括基于P…

【web前端2024】简单几步制作web3d《萌宠星球》智体节点模板!

使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎(内嵌了three.js编辑器的定制版-支持以第一视角游览3D场馆&#xff…

音视频开发4 FFmpeg windows 环境搭建,QT 安装,动态库的搜索路径

FFmpeg 为了让所有平台的开发者都能够学习到音视频开发的通用技术,本教程主要讲解跨平台的音视频开发库FFmpeg。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据&…

基于SSM的农产品销售管理系统

文章目录 项目介绍一、项目功能介绍二、部分页面展示三、部分源码四、底部获取全部源码(9.9¥带走) 项目介绍 农产品销售管理系统 一、项目功能介绍 一、介绍 系统分为两个角色 用户功能:登陆,注册,商品分…

工业光源环形系列一高亮条形光源特点

产品特点 ◆可以根据检测需求随意调整照射角度; ◆可以根据检测需求选择光源颜色; ◆多个条形光源可以自由组合; ◆使用大功率贴片灯珠,亮度高; ◆灯珠上面增加透镜,照射距离更远

一站式PDF解决方案:如何部署自己的PDF全能工具(Docker部署和群晖部署教程)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 开始部署 📒📝 Docker部署📝 群晖部署📝 本地安装⚓️ 相关链接 ⚓️📖 介绍 📖 在数字化办公的今天,PDF文件几乎成了我们日常工作中不可或缺的一部分。但你是否曾因为PDF文件的编辑、转换、合并等问题而头疼?如果…

一文快速掌握高性能内存队列Disruptor

写在文章开头 Disruptor是英国外汇公司LMAX开源的一款高性能内存消息队列,理想情况下单线程可支撑600w的订单。所以本文会从使用以及设计的角度来探讨一下这款神级java消息队列。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java code…

中学数学重大错误:射线A沿其正向平移非0距离就变为其真子集了

黄小宁 射线A沿其射出的方向平移非0距离变为B≌A,中学数学一直认定B是A的一部分,其实这是将两异射线(函数)误为同一射线(函数)的肉眼直观错觉。设“点集A{点p}”表示A的元素是点p&a…

MongoDB(四):条件操作符

条件操作 1、概述2、比较操作2.1、大于操作符-$gt2.2、大于等于操作符-$gte2.3、小于——$lt2.4、小于等于——$lte2.5、范围查询 3、总结 大家好,我是欧阳方超,可以扫描下方二维码关注我的公众号“欧阳方超”,后续内容将在公众号首发。 1、…

python实现图书馆借阅管理系统-文件存储

《面向对象》案例引入 通过本章的学习,请用面向对象思想实现《图书馆借阅管理系统》的登录注册页面和用户信息维护页面和图书借阅页面。 【功能要求】: 1、用面向对象思想改写上一章的《函数模块》案例引入。 2、增加图书借阅页面。 ①学生登录后,可以进入图书借阅页面,实现…

ROS摄像头标定

目录 一、内容概要二、 配置ubuntu摄像头环境2.1 硬件准备2.2 软件准备 三、 完成摄像头标定四、 标定结果运用五、 实验心得参考链接 一、内容概要 配置ubuntu摄像头环境进行摄像头标定 二、 配置ubuntu摄像头环境 2.1 硬件准备 1.电脑自带摄像头 或 2.USB外设摄像头 在原…

ASV1000视频监控平台:接入支持JT808标准的设备

目录 一、JT/T 808标准简介 (一)概述 (二)标准内容简介 1、消息分类 2、位置信息 3、报警信息 4、车辆控制 5、数据转发 二、在ASV1000上通过JT808添加设备 (一)登录视频监控平台管理端 &#x…

Hass哈斯数控数据采集网络IP配置设置

机床数据采集(MDC)允许你使用Q和E命令通过网络接口或选项无线网络从控制系统提取数据。设置143支持该功能,并且指定控制器使用这个数据端口。MDC是一个需要一台附加计算机发送请求,解释说明和存储机床数据的软件功能。这个远程计算…

使用pytorch构建GAN网络并实现FID评估

上一篇文章介绍了GAN的详细理论,只要掌握了GAN,对于后面各种GAN的变形都变得很简单,基础打好了,盖大楼自然就容易了。既然有了理论,实践也是必不可少的,这篇文章将使用mnist数据集来实现简单的GAN网络&…

如何从Mac上的清空垃圾箱中恢复已删除的文件?

Mac用户几乎每天都会删除文件。当您将文档删除到 Mac 垃圾箱时,该文件将被剪切到 Mac 垃圾箱中,并且可以轻松放回原处。但是,在某些情况下,您错误地删除了文档和文件,并在您意识到自己犯了一个大错误之前清空了垃圾箱。…

Advanced RAG 06:生成结果的相关性低? 快用 Query Rewriting 优化技术

编者按:在现实生活中,普通用户很难编写合适的提示词(prompt)来指示 LLM 完成期望任务。用户提出的 queries 往往存在词汇不准确、缺乏语义信息等问题,导致 LLM 难以理解并生成相关的模型响应。因此,如何优化…

刷代码随想录有感(58):二叉树的最近公共祖先

题干: 代码: class Solution { public:TreeNode* traversal(TreeNode* root, TreeNode* p, TreeNode* q){if(root NULL)return NULL;if(root p || root q)return root;TreeNode* left traversal(root->left, p, q);TreeNode* right traversal(r…

JuiceFS v1.2-beta1,Gateway 升级,多用户场景权限管理更灵活

JuiceFS v1.2-beta1 今天正式发布。在这个版本中,除了进行了大量使用体验优化和 bug 修复外,新增三个特性: Gateway 功能扩展:新增了“身份和访问管理(Identity and Access Management,IAM)” 与…

泛型编程四:栈、堆,内存管理

文章目录 前言一、栈、堆栈(Stack)堆(Heap) 二、static生命期三、heap生命期四、new、delete的作用机制五、动态分配的内存(in VC)如图,第一列为调试模式下的复数的内存分配,复数有两…
最新文章