当前位置: 首页 > news >正文

【C++】内存管理:内存划分、动态内存管理(new、delete用法)

文章目录

  • 一、C/C++中的内存划分
  • 二、C语言中动态内存管理方式
  • 三、C++中动态内存管理方式
    • 1、new、delete基本用法
      • (1)、内置类型
      • (2)、自定义类型
    • 2、operator new与operator delete函数
    • 3、new和delete的实现原理
      • (1)内置类型
      • (2)自定义类型
    • 4、malloc/free和new/delete的区别
  • 四、谢谢观看!

一、C/C++中的内存划分

在这里插入图片描述

  • 栈又叫堆栈----存储非静态局部变量、函数参数、返回值等,栈是向下增长的。
  • 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可以使用系统接口创建共享内存,做进程间通信。
  • ----用于程序运行时动态内存分配,堆是向上增长的。
  • 数据段(静态区)----存储全局数据和静态数据。
  • 代码段(常量区)----存储可执行的代码、只读常量。

题目练习:

在这里插入图片描述
如以上代码,问:

选择题:
选项 : A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)
globalVar在哪里?____
staticGlobalVar在哪里?____
staticVar在哪里?____
localVar在哪里?____
num1 在哪里?____
char2在哪里?____
*char2在哪里?___
pChar3在哪里?____
*pChar3在哪里?____
ptr1在哪里?____
*ptr1在哪里?____
答案:CCCAA AAADAB

讲解:
在这里插入图片描述

二、C语言中动态内存管理方式

malloc / calloc /realloc /free
这里就不在讲解用法了。

三、C++中动态内存管理方式

关键字 : new 、delete
C++通过new来动态申请内存,通过delete来释放内存。简化了C语言中malloc的使用。

1、new、delete基本用法

(1)、内置类型

int* p1 = new int;//开辟一个int类型的空间给p1
int* p2 = new int[10];//开辟10个int类型的空间给p2delete p1;//释放P1
delete[] p2;//释放p2//C++支持申请对象+初始化
//单个对象初始化
int* p3 = new int(0);//p3指向被初始化为0的变量
//多个对象初始化
int* p4 = new int[10]{0};
int* p5 = new int[10]{1,2,3,4,5};//初始化部分对象
delete p3;
delete[] p4;
delete[] p5;

(2)、自定义类型

#include<iostream>
using namespace std;class A
{
public:A(int a1 = 0, int a2 = 0):_a1(a1), _a2(a2){cout << "A(int a1 = 0, int a2 = 0)" << endl;}~A(){cout << "~A()" << endl;}private:int _a1;int _a2;
};
int main()
{A* p1 = new A();A* p2 = new A();delete p1;delete p2;return 0;
}

new调用类的构造函数,delete调用类的析构函数。
在这里插入图片描述
之前我们用C语言来构建链表时,对每个节点都要进行malloc来开辟空间,并且进行初始化赋值,有了new之后,就方便了很多:

struct ListNode
{int val;ListNode* next;ListNode(int a):val(a), next(nullptr){}
};
int main()
{ListNode* n1 = new ListNode(1);ListNode* n2 = new ListNode(2);ListNode* n3 = new ListNode(3);ListNode* n4 = new ListNode(4);n1->next = n2;n2->next = n3;n3->next = n4;return 0;
}
#include<iostream>
using namespace std;class A
{
public:默认构造//A(int a1 = 0, int a2 = 0)//	:_a1(a1)//	, _a2(a2)//{//	cout << "A(int a1 = 0, int a2 = 0)" << endl;//}//构造函数A(int a1 , int a2 ):_a1(a1), _a2(a2){cout << "A(int a1 = 0, int a2 = 0)" << endl;}~A(){cout << "~A()" << endl;}private:int _a1;int _a2;
};
int main()
{A* p1 = new A();//在有默认构造函数时:A* p2 = new A[3];//会调用三次构造函数//在没有默认构造函数时:对其进行初始化//方法1(拷贝构造)A aa1(1,1);A aa2(2,2);A aa3(3,3);A* p3 = new A[3]{aa1,aa2,aa3};//方法2(匿名对象)A* p4 = new A[3]{A(1,1),A(2,2),A(3,3)}//匿名对象//方法3(隐式类型转换)A* p5 = new A[3]{ {1,1},{2,2},{3,3} };delete p1;delete[] p2;return 0;
}

2、operator new与operator delete函数

new和delete是用户进行动态内存申请和释放的操作符,operator new和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。

operator new 实际也是通过maloc来申请空间,如果malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。operator delete 最终是通过free来释放空间的。

3、new和delete的实现原理

(1)内置类型

如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是: new/delete申请和释放的是单个元素的空间,new[]和delete[]申请和释放的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。

(2)自定义类型

(1)new原理

1.调用operator new函数申请空间
2.在申请的空间上执行构造函数,完成对象的构造

(2)delete原理

  1. 在空间上执行析构函数,完成对象中资源的清理工作
  2. 调用operator delete函数释放对象的空间

(3)new T[N]原理

  1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对
    象空间的申请
  2. 在申请的空间上执行N次构造函数

(4)delete[]原理

  1. 在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理
  2. 调用operator delete[]释放空间,实际在operator delete[]中调用operator delete来释
    放空间

4、malloc/free和new/delete的区别

malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放
不同点:
1.malloc和free是函数,new和delete是操作符
2.malloc申请的空间不会初始化,new可以初始化
3.malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可如果是多个对象,[]中指定对象个数即可
4. malloc的返回值为void*,在使用时必须强转,new不需要,因为new后跟的是空间的类型
5.malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常
6.申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理释放

四、谢谢观看!

相关文章:

【C++】内存管理:内存划分、动态内存管理(new、delete用法)

文章目录 一、C/C中的内存划分二、C语言中动态内存管理方式三、C中动态内存管理方式1、new、delete基本用法(1)、内置类型(2)、自定义类型 2、operator new与operator delete函数3、new和delete的实现原理&#xff08;1&#xff09;内置类型&#xff08;2&#xff09;自定义类型…...

【k8s】KubeProxy 的三种工作模式——Userspace、iptables 、 IPVS

在 Kubernetes 集群中&#xff0c;KubeProxy 是实现 Service 的网络代理和负载均衡功能的关键组件。它支持三种工作模式&#xff1a;Userspace 模式、iptables 模式和 IPVS 模式。每种模式都有其特点和适用场景&#xff0c;以下是详细介绍&#xff1a; Userspace 模式 工作原…...

密码学的hash函数,哈希碰撞, collision resistance, BTC用到的SHA-256简介

密码学中的哈希函数、哈希碰撞、抗碰撞性&#xff08;collision resistance&#xff09;以及比特币中使用的 SHA-256 的简明介绍&#xff1a; &#x1f9e9; 一、哈希函数&#xff08;Hash Function&#xff09; 定义&#xff1a; 哈希函数是一种将任意长度的输入&#xff08;…...

通过监督微调(SFT)提升AI Agent效果的完整指南

一、SFT技术深度剖析 1.1 核心概念 监督微调&#xff08;Supervised Fine-Tuning&#xff09;是在大规模预训练语言模型&#xff08;如LLaMA、GPT系列&#xff09;的基础上&#xff0c;使用特定任务标注数据进行二次训练的过程。其本质是通过有监督学习调整模型参数&#xff…...

TCP基础题:音乐播放列表管理系统

需求描述 服务器端 创建一个 TCP 服务器&#xff0c;监听本地的 9999 端口&#xff0c;支持多个客户端连接。维护一个音乐播放列表&#xff0c;每个音乐条目包含歌曲名称、歌手、时长等信息。能够处理客户端的以下请求&#xff1a; 添加音乐到播放列表&#xff1a;接收客户端发…...

碰一碰发视频源码文案功能,支持OEM

在数字化营销与内容传播领域&#xff0c;碰一碰发视频文案功能凭借 NFC 技术的便捷性&#xff0c;实现了视频与文案的快速传递。本文将围绕该功能的开发流程&#xff0c;从需求分析、技术架构设计到核心功能实现&#xff0c;详细解析其开发要点&#xff0c;为开发者提供实践参考…...

如何在 Vue 3 中实现一个自定义的 `v-html` 组件

引言 在 Vue.js 中&#xff0c;v-html 是一个非常有用的指令&#xff0c;用于将 HTML 字符串渲染到元素中。然而&#xff0c;由于它直接插入 HTML 内容&#xff0c;存在潜在的安全风险&#xff08;如 XSS 攻击&#xff09;。因此&#xff0c;了解其工作原理并实现一个安全的替…...

差分对的返回电流-信号完整性分析

差分对的返回电流: 单端线的返回电流集中在参考平面&#xff0c;差分对的返回电流是怎样分布的?有一种观点认为&#xff0c;对于差分对这种耦合传输结构&#xff0c;其中一条走线是另一条走线的返回路径。甚至更进一步得出差分对不需要参考平面的结论。是否真的如此?要想了解…...

html单页业务介绍源码

源码介绍 html单页业务介绍源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行 效果预览 源码免费获取 html单页业务介绍源码...

IDEA导入并启动若依项目步骤(SpringBoot+Vue3)

1.下载后端项目 项目地址&#xff1a;https://gitee.com/y_project/RuoYi-Vue 复制命令&#xff0c;将项目克隆到本地 git clone gitgitee.com:y_project/RuoYi-Vue.git使用IDEA打开&#xff08;会有点慢&#xff0c;耐心等待&#xff09;&#xff0c;打开后如下 2.Mysql导…...

零基础上手Python数据分析 (22)案例实战]之利用 Matplotlib Seaborn 进行电商销售数据可视化分析

写在前面 —— 图表为刃,洞察先行!综合运用 Pandas、Matplotlib 与 Seaborn,点亮数据价值 本篇通过一个完整的案例实战,体验如何将数据分析与数据可视化紧密结合,让冰冷的数据转化为生动、直观、富有洞察力的视觉故事! 案例目标: 本篇博客将延续我们在第 17 篇案例中…...

图像预处理-霍夫变换

一.概念 霍夫变换是图像处理的一种技术&#xff0c;主要用于检测图像中的直线、圆等几何形状。基本思想就是将图像空间&#xff08;直角坐标系或极坐标系&#xff09;中的点映射到(霍夫空间)参数空间中&#xff0c;通过在参数空间中寻找累计最大值实现对特定形状的检测。 接下…...

逐步了解蓝牙 LE 配对(物联网网络安全)

配对是蓝牙 LE 中的一个重要概念。让我们来了解一下蓝牙 LE 配对的基础知识,概述 LE 设备如何在可信设备之间安全地共享密钥。 在之前的一篇文章]中,我们讨论了蓝牙 LE 的安全密钥。我们了解到,蓝牙 LE 设备可以创建并共享三个不同的安全密钥:一个用于数据加密,一个用于创…...

嵌入模型(Embedding Models)原理详解:从Word2Vec到BERT的技术演进

一、什么是嵌入模型&#xff1f; 嵌入模型&#xff08;Embedding Models&#xff09; 是一种将高维离散数据&#xff08;如文本、图像&#xff09;转换为低维连续向量表示的技术。这些向量能够反映数据的语义关系&#xff0c;使得“语义相近的实体在向量空间中距离更近”。例如…...

解析塔能科技:绿色低碳智慧节能一站式破局之匙

在能源问题日益凸显的当下&#xff0c;绿色低碳、高效节能成为全球发展的重要课题。对各类节能方案进行深入剖析后&#xff0c;可以发现塔能科技的绿色低碳智慧节能一站式解决方案极具创新性与实用性&#xff0c;切实为众多行业面临的能源困境提供了有效解决路径。 直面行业痛点…...

el-menu箭头改为右下

问&#xff1a; el-menu箭头改为右下 回答&#xff1a; :deep(.el-menu){.el-sub-menu .el-sub-menu__icon-arrow{transition: transform 0.3stransform: rotateZ(-90deg) !important;}/* 展开状态&#xff1a;箭头向下 */.el-sub-menu.is-opened .el-sub-menu__icon-arrow,…...

[特殊字符][特殊字符] HarmonyOS相关实现原理聊聊![特殊字符][特殊字符]

Hey小伙伴们~ 今天咱们来聊聊HarmonyOS的实现原理吧&#xff01;&#x1f914;&#x1f4a1; 虽然直接看源代码是最直接的方式&#xff0c;但是OpenHarmony项目的开源进度有点让人捉急呢… 不过没关系&#xff0c;我们可以通过已经开放的SDK、IDE、开发示例和编译产物来一探究竟…...

RTSP播放器实现回调RGB|YUV给视觉算法,然后二次编码推送到RTMP服务

引言 在本文中&#xff0c;我们将介绍如何基于大牛直播SDK构建一个功能强大的RTSP|RTMP播放器&#xff0c;该播放器利用自定义SDK解码视频、处理RGB帧&#xff0c;并将其推送到RTMP流中进行直播。这个解决方案非常适合需要在实时视频流中集成视觉算法的场景&#xff0c;在处理…...

补题【Darkness+Different Billing+Dice Game】

文章目录 1.Darkness2.Different Billing3.Dice Game 1.Darkness 题目来源&#xff1a;Darkness I 这题不难想&#xff0c;通过作图我们发现 当nm时直接取对角线就好 当n!m时&#xff0c;取m,n的最小值&#xff0c;那么最小值的这个正方形都可以被填为黑色&#xff0c;剩下的…...

卷积神经网络:视觉炼金术士的数学魔法

&#x1f3ae; “你以为《赛博朋克2077》的夜之城是画出来的&#xff1f;不&#xff0c;是卷积神经网络’卷’出来的&#xff01;” &#x1f3ae; 一、卷积&#xff1a;像素世界的连连看大师 想象你拿着一张《蒙娜丽莎》的拼图——卷积核就像你手中的拼图碎片&#xff0c;在画…...

Python:简介,Python解释器安装,第一个Python程序,开发环境(PyCharm安装和配置、Sublime安装和配置)

目录 Python简介 Python解释器的安装&#xff08;Windows&#xff09; 下载和安装Python安装包&#xff08;解释器&#xff09; 验证Python安装情况 第一个Python程序 单行运行 多行运行 Python开发环境&#xff08;安装和配置PyCharm工具&#xff09; 安装PyCharm Py…...

CE第二次作业

实验要求&#xff1a; 1.配置ssh实现A&#xff0c;B主机互相免密登录 2.配置nginx服务&#xff0c;通过多ip区分多网站 一&#xff0c;配置ssh实现A&#xff0c;B主机互相免密登录 步骤 在主机 A 上生成 SSH 密钥对。把主机 A 的公钥复制到主机 B。在主机 B 上重复上述步骤…...

【阿里云大模型高级工程师ACP习题集】2.4 自动化评测答疑机器人的表现(⭐️⭐️⭐️ 重点章节!!!)

习题集: 【单选题】在使用Ragas评估RAG应用时,Answer Correctness指标计算中,语义相似度是通过以下哪种方式得到的?( ) A. 大模型直接判断 B. 计算文本向量的余弦相似度 C. 对比文本词汇重合度 D. 统计文本字数差异 【多选题】当Context recall指标得分较低时,可采取的优…...

多头注意力

Multi-Head Attention 论文地址 https://arxiv.org/pdf/1706.03762 多头注意力介绍 多头注意力是Transformer模型的关键创新&#xff0c;通过并行执行多个独立的注意力计算单元&#xff0c;使模型能够同时关注来自不同表示子空间的信息。每个注意力头学习不同的语义特征&#x…...

【leetcode100】目标和

1、题目描述 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添加 - …...

动态哈希映射深度指南:从基础到高阶实现与优化

哈希表是计算机科学中最高效的数据结构之一&#xff0c;而动态哈希映射通过智能扩容机制&#xff0c;在实时系统中展现出极强的适应性。本文将深入探讨其实现细节&#xff0c;结合主流框架源码解析&#xff0c;并给出可落地的性能优化方案。 一、动态哈希的数学本质 1. 哈希函…...

leetcode 2799. 统计完全子数组的数目 中等

给你一个由 正 整数组成的数组 nums 。 如果数组中的某个子数组满足下述条件&#xff0c;则称之为 完全子数组 &#xff1a; 子数组中 不同 元素的数目等于整个数组不同元素的数目。 返回数组中 完全子数组 的数目。 子数组 是数组中的一个连续非空序列。 示例 1&#xff…...

使用RabbitMQ实现判题功能

这次主要选用RabbitMQ消息队列来对判题服务和题目服务解耦&#xff0c;题目服务只需要向消息队列发送消息&#xff0c;判题服务从消息队列中取信息去执行判题&#xff0c;然后异步更新数据库即可。 五一宝宝请快点跑~~~~~ 先回顾一下RabbitMQ &#xff08;1&#xff09;引入依…...

无过拟合的记忆:分析大语言模型的训练动态

Kushal Tirumala⇤ Aram H. Markosyan⇤ Luke Zettlemoyer Armen Aghajanyan Meta AI 研究 {ktirumala,amarkos,lsz,armenag}fb.com 原文链接&#xff1a;[2210.09262] Physics-Driven Convolutional Autoencoder Approach for CFD Data Compressions 摘要 尽管超大语言模型…...

【Java面试笔记:进阶】16.synchronized底层如何实现?什么是锁的升级、降级?

在 Java 中,synchronized 关键字的底层实现依赖于 对象头(Object Header) 和 监视器锁(Monitor) 机制,并通过 锁的状态升级(Lock Escalation) 来优化同步性能。 1. synchronized 的底层实现 synchronized 的同步机制基于 Monitor 对象,它是同步的基本实现单元。 通过…...

python可视化:北方城市人口流动趋势分析1

python可视化&#xff1a;北方城市人口流动趋势分析1 斑点鱼在做销售数据分析时发现北京天津的同比下滑明显&#xff0c;客流下滑明显。而山东保定的客流同比上升。引起了斑点鱼对于北方人口流动的好奇。 所以本文将分析2025年北方地区(北京、天津、河北、山东、山西、辽宁等)…...

wps excel 常用操作

数据分列 对于有分隔规律的内容&#xff0c;可以通过分隔符将该内容进行分列 例如&#xff0c;以下字符串&#xff0c;可使用Excel对包含IP地址、数据库类型、环境、负责人和日期的字符串进行分列&#xff1a; 192.168.175.211-MySQL 数据库-DEV-李华-2025.06.30 将以上字符串…...

云智融合普惠大模型AI,政务服务重构数智化路径

2025年是“十四五”收官之年&#xff0c;数字政府和政务数智化作为“数字中国”建设的重点&#xff0c;已经取得了显著成效。根据《联合国电子政务调查报告2024》&#xff0c;我国电子政务发展指数全球排名第35位&#xff0c;与2022年相比提升8个名次&#xff1b;其中&#xff…...

全行业软件定制:APP/小程序/系统开发与物联网解决方案

在数字化浪潮席卷全球的今天&#xff0c;软件已经渗透到我们生活的方方面面&#xff0c;成为推动社会进步的重要力量。作为一家专注于专业软件定制开发的公司&#xff0c;哲科软件深知每一个行业、每一个企业都有其独特的需求和痛点。因此&#xff0c;我们致力于提供个性化软件…...

Java虚拟机(JVM)家族发展史及版本对比

Java虚拟机&#xff08;JVM&#xff09;家族发展史及版本对比 一、JVM家族发展史 1. 早期阶段&#xff08;1996-2000&#xff09; Classic VM&#xff08;Java 1.0-1.1&#xff09;&#xff1a; 厂商&#xff1a;Sun Microsystems&#xff08;Oracle前身&#xff09;。特点&…...

电脑怎么强制退出程序回到桌面 详细操作步骤

电脑日常使用过程中&#xff0c;我们有时会遇到程序无响应或卡死的情况&#xff0c;这时需要采取措施强制关闭这些程序才能保持电脑的正常工作和运行。那么&#xff0c;电脑如何强制退出程序呢&#xff1f;其实方法有很多种&#xff0c;下面便为大家介绍几种电脑强制关闭程序的…...

蓝牙 LE:安全模式和程序说明(蓝牙中的网络安全)

在蓝牙低功耗 (BLE) 中,安全性是一个多方面的难题。了解 BLE 的三种主要安全模式以及五个关键的 BLE 安全程序。 毫无疑问,低功耗蓝牙 (BLE) 技术的迅猛发展为我们的生活带来了更多便利。然而,随着低功耗蓝牙设备的普及,人们对其安全性的担忧也日益加剧。 与普遍看法相反…...

低代码平台开发胎压监测APP

项目介绍 该项目是一个利用Flutter框架和蓝牙技术实现轮胎压力实时监测的应用。 主要功能如下&#xff1a; 用于接收蓝牙模块传输的胎压数据&#xff0c;并实时显示胎压值。APP对接收到的胎压数据进行处理&#xff0c;如单位转换、数据滤波等&#xff0c;然后将处理后的胎压值…...

GNOME扩展入门:日期时间

Getting Started | GNOME JavaScript 1.扩展路径 ~/.local/share/gnome-shell/extensions/ 2.新建文件夹 datetimesonichy 3.metadata.json {"uuid": "datetimesonichy","name": "datetime","description": "Dis…...

NLP高频面试题(五十二)——深度学习优化器详解

在深度学习的训练过程中,各种基于梯度的优化器肩负着寻找损失函数最优解的重任。最基础的梯度下降法通过沿着损失函数负梯度方向迭代更新参数,实现对模型参数的优化;而随机梯度下降(SGD)则以更高的计算效率和内存利用率在大规模数据集上大放异彩,但也因更新噪声大、易陷入…...

SLAM常用地图对比示例

序号地图类型概述1格栅地图将现实环境栅格化&#xff0c;每一个栅格用 0 和 1 分别表示空闲和占据状态&#xff0c;初始化为未知状态 0.52特征地图以点、线、面等几何特征来描绘周围环境&#xff0c;将采集的信息进行筛选和提取得到关键几何特征3拓扑地图将重要部分抽象为地图&…...

Web常见攻击方式及防御措施

一、常见Web攻击方式 1. 跨站脚本攻击(XSS) 攻击原理&#xff1a;攻击者向网页注入恶意脚本&#xff0c;在用户浏览器执行 存储型XSS&#xff1a;恶意脚本存储在服务器&#xff08;如评论区&#xff09; 反射型XSS&#xff1a;恶意脚本通过URL参数反射给用户 DOM型XSS&…...

java.lang.IllegalArgumentException: URI is not hierarchical报错

java.lang.IllegalArgumentException: URI is not hierarchical Thread.currentThread().getContextClassLoader("类的全路径").getClass().newInstance()一个类的静态块初始化异常了&#xff0c;后面调用这个类创建对象会报错吗&#xff1f; 是的&#xff0c;如果一…...

118. 杨辉三角

目录 一、问题描述 二、解题思路 三、代码 四、复杂度分析 一、问题描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 二、解题思路 每一行的第一个和最后一个元素是 1&…...

Anything V4/V5 模型汇总

​​​​​​二次元风格生成扩散模型-anything-v4.0Stable Diffusion anything-v5-PrtRE模型介绍及使用深度探索 Anything V5&#xff1a;安装与使用全攻略anything-v5x0.25少儿插画_v1xyn-ai/anything-v4.0...

网络原理 - 7(TCP - 4)

目录 6. 拥塞控制 7. 延时应答 8. 捎带应答 9. 面向字节流 10. 异常情况 总结&#xff1a; 6. 拥塞控制 虽然 TCP 有了滑动窗口这个大杀器&#xff0c;就能够高效可靠的发送大量的数据&#xff0c;但是如果在刚开始阶段就发送大量的数据&#xff0c;仍然可能引起大量的…...

探秘 FFmpeg 版本发展时间简史

前言 FFmpeg 是一套开源的计算机程序,主要用于记录、转换数字音频、视频,并能将其转化为流。它提供了录制、转换以及流化音视频的完整解决方案,在多媒体处理领域应用广泛。很多小伙伴们想系统的学习FFmpeg,还是有必要了解下FFmpeg的版本发展历史,感受它每次的版本迭代是如…...

5.3.1 MvvmLight以及CommunityToolkit.Mvvm介绍

MvvmLight、CommunityToolkit.Mvvm是开源包,他们为实现 MVVM(Model-View-ViewModel)模式提供了一系列实用的特性和工具,能帮助开发者更高效地构建 WPF、UWP、MAUI 等应用程序。 本文介绍如下: 一、使用(旧)的MvvmLight库 其特点如下,要继承的基类是ViewModelBase;且使用…...

PCB常见封装类型

1. 电阻、电容、电感封装 2. 二极管、三极管封 3. 排阻类器件&#xff08;8脚、16脚&#xff09;封装 4. SO类器件&#xff08;间距有1.27、2.54mm等&#xff09;封装 5. QFP类器件封装&#xff08;四方扁平封装&#xff09; 结构&#xff1a;引脚分布在封装的四个侧面&#…...

一键多环境构建——用 Hvigor 玩转 HarmonyOS Next

引言 在 HarmonyOS Next 的应用开发中&#xff0c;常常需要针对不同环境&#xff08;测试、预发、线上&#xff09;或不同签名&#xff08;调试、正式&#xff09;输出多个 APP/HAP 包。虽然 HarmonyOS 提供了多目标构建&#xff08;Multi-Target Build&#xff09;能力&#…...