深度学习---知识蒸馏(Knowledge Distillation, KD)
一、知识蒸馏的本质与起源
定义:
知识蒸馏是一种模型压缩与迁移技术,通过将复杂高性能的教师模型(Teacher Model)所学的“知识”迁移到轻量级的学生模型(Student Model),使学生模型在参数量和计算成本大幅降低的同时,尽可能保留教师模型的性能。
起源:
- 由 Geoffrey Hinton 等人于2015年在论文《Distilling the Knowledge in a Neural Network》中首次提出。
- 核心动机:解决深度学习模型在实际部署(如移动端、边缘设备)时的效率问题,同时避免从头训练小模型可能面临的性能下降。
二、核心概念:知识的类型
知识蒸馏中的“知识”分为两类:
-
显性知识(Explicit Knowledge)
- 即传统的标签信息(硬标签,如分类任务中的独热编码)。
- 作用:提供基础监督信号。
-
隐性知识(Implicit Knowledge)
- 指教师模型的输出概率分布(软标签,如softmax层的输出),反映类别间的相似性和相关性。
- 示例:教师模型对“猫”“狗”“狼”的预测概率分别为0.6、0.3、0.1,软标签可揭示“狗”与“狼”的相似性,而硬标签仅显示正确类别为“猫”。
- 价值:软标签携带更丰富的语义信息,帮助学生模型学习类别间的潜在关系,提升泛化能力。
三、基本框架与数学原理
1. 教师-学生架构
- 教师模型:通常为复杂模型(如ResNet、BERT),具有高容量和高准确率。
- 学生模型:轻量级架构(如MobileNet、DistilBERT),目标是模仿教师的行为。
2. 训练过程
-
软标签生成:教师模型对输入数据生成软标签,通过引入温度参数 ( T ) 调整softmax输出的平滑度:
-
其中 ( z_i ) 为教师模型的logits,( T ) 越高,软标签越平滑(类别差异模糊);( T=1 ) 时退化为标准softmax。
-
损失函数设计:
通常结合软标签损失和硬标签损失:
-
软标签损失:衡量学生与教师软标签的差异,常用KL散度(Kullback-Leibler Divergence):
其中 ( p student p_{\text{student}} pstudent) 为学生模型的软化输出(同样使用温度 ( T ))。
-
硬标签损失:传统交叉熵损失,确保学生模型正确分类:
其中 ( p student hard p_{\text{student}}^{\text{hard}} pstudenthard ) 为学生模型的标准softmax输出(( T=1 ))。
-
-
温度的作用:
- 训练阶段:( T>1 ) 使教师软标签更平滑,释放类别间的隐性知识。
- 推理阶段:学生模型的 ( T ) 设为1,恢复标准预测。
四、关键技术与变种
1. 基于输出的蒸馏(传统蒸馏)
- 直接迁移教师模型的输出层知识,适用于分类任务。
- 变种:
- 多教师蒸馏:集成多个教师模型的软标签,提升学生模型的鲁棒性(如使用不同初始化或架构的教师)。
- 跨模态蒸馏:在不同模态间迁移知识(如图像→文本,或语音→视觉)。
2. 基于特征的蒸馏(中间层蒸馏)
- 迁移教师模型中间层的特征表示,适用于复杂任务(如语义分割、生成模型)。
- 典型方法:
- FitNets:强制学生模型的隐藏层输出匹配教师模型的对应层(使用MSE损失)。
- 注意力蒸馏:迁移教师模型的注意力图(如Transformer中的自注意力分布),适用于NLP任务(如DistilBERT)。
3. 自蒸馏(Self-Distillation)
- 无外部教师模型,学生模型通过自身集成或迭代优化实现蒸馏。
- 场景:
- 数据增强:同一模型对不同增强数据的预测作为软标签。
- 模型集成:同一模型的不同副本(不同初始化)相互蒸馏。
4. 无监督/半监督蒸馏
- 在无标签或少量标签数据上,利用教师模型生成伪标签或软标签指导学生训练。
- 应用:跨领域迁移(如源域教师指导目标域学生)。
5. 与其他技术结合
- 神经架构搜索(NAS):在搜索轻量级架构时同步进行蒸馏。
- 联邦学习:在分布式场景中,中央教师模型向边缘设备的学生模型迁移知识,保护数据隐私。
五、应用场景
1. 自然语言处理(NLP)
- 模型压缩:如DistilBERT(BERT的蒸馏版,参数减少40%,速度提升60%)、TinyBERT、MobileBERT。
- 对话系统:将大型预训练模型(如GPT-3)的知识迁移到对话机器人,降低推理延迟。
2. 计算机视觉(CV)
- 轻量级模型设计:如MobileNet蒸馏自ResNet,用于移动端图像分类;YOLO系列的蒸馏版用于实时目标检测。
- 医学影像:将复杂3D CNN的知识迁移到轻量级模型,便于临床快速诊断。
3. 自动驾驶与边缘计算
- 车载模型需低延迟,通过蒸馏将高性能检测模型(如Faster R-CNN)压缩为实时模型(如YOLO-Lite)。
4. 推荐系统
- 将深度推荐模型(如Wide & Deep)蒸馏为轻量级模型,提升在线服务效率。
六、挑战与未来方向
1. 核心挑战
- 负迁移(Negative Transfer):若教师模型存在噪声或过拟合,学生可能学习到错误知识。
- 架构差异:跨架构蒸馏(如CNN→Transformer)时,知识迁移效率低。
- 超参数调优:温度 ( T )、软硬损失权重 ( \alpha ) 需手动调整,缺乏自动化方案。
- 计算成本:训练教师模型需大量资源,限制了在数据稀缺场景的应用。
2. 未来研究方向
- 无教师蒸馏:通过自监督学习或生成模型替代教师(如对比学习、GAN生成软标签)。
- 自动化蒸馏:利用贝叶斯优化、强化学习自动搜索蒸馏参数(如温度、损失权重)。
- 跨领域/跨模态蒸馏:探索异构数据间的知识迁移(如图像→视频、文本→音频)。
- 增量蒸馏:在持续学习场景中,逐步将新教师的知识融入学生模型,避免灾难性遗忘。
- 理论分析:深入研究蒸馏的泛化边界、信息压缩效率,建立更严谨的数学理论基础。
七、与其他模型压缩技术的对比
技术 | 核心思想 | 优势 | 局限性 |
---|---|---|---|
知识蒸馏 | 迁移教师模型的隐性知识 | 保留性能的同时压缩架构 | 需预训练教师模型 |
剪枝 | 删除冗余连接或神经元 | 减少参数量,保持架构不变 | 可能影响模型稳定性 |
量化 | 降低权重/激活值的精度 | 减少内存占用,加速推理 | 可能导致精度损失 |
权重共享 | 强制不同层/神经元共享参数 | 减少存储需求 | 适用场景有限 |
互补性:知识蒸馏常与剪枝、量化结合使用(如先蒸馏再剪枝),进一步提升压缩效率。
八、典型案例
-
NLP领域
- DistilBERT:基于BERT-base蒸馏,层数从12层减至6层,参数量从110M减至66M,在GLUE基准上保留97%的性能。
- TinyBERT:同时蒸馏BERT的输出层和中间层特征,压缩率更高(7.5M参数)。
-
CV领域
- MobileNet from ResNet:将ResNet的软标签迁移至MobileNet,在ImageNet上Top-1准确率提升3-4%。
- Face Recognition:蒸馏版FaceNet在移动端实现实时人脸识别,精度接近原版。
-
工业应用
- Google Speech Recognition:通过蒸馏将深度语音模型压缩,部署于手机端语音助手。
- 自动驾驶:NVIDIA的DistilledSSD将目标检测模型压缩,适配车载嵌入式系统。
九、理论分析:为何有效?
- 正则化视角:软标签损失为学生模型提供额外的正则化,避免过拟合。
- 信息迁移视角:软标签揭示数据分布的流形结构(manifold structure),帮助学生模型捕捉类别间的依赖关系。
- 对抗学习视角:教师模型可视为生成器,学生模型为判别器,蒸馏过程类似生成对抗网络(GAN)的优化。
十、总结
知识蒸馏通过迁移教师模型的隐性知识,在模型压缩领域实现了性能与效率的平衡,已成为深度学习落地的关键技术之一。未来,随着无监督蒸馏、自动化调优和跨模态迁移的发展,其应用场景将进一步扩展,推动人工智能向轻量化、泛在化方向迈进。
相关文章:
深度学习---知识蒸馏(Knowledge Distillation, KD)
一、知识蒸馏的本质与起源 定义: 知识蒸馏是一种模型压缩与迁移技术,通过将复杂高性能的教师模型(Teacher Model)所学的“知识”迁移到轻量级的学生模型(Student Model),使学生模型在参数量和计…...
AI日报 - 2024年5月17日
🌟 今日概览 (60秒速览) ▎🤖 大模型前沿 | OpenAI推出自主编码代理Codex;Google DeepMind发布Gemini驱动的编码代理AlphaEvolve,能设计先进算法;Meta旗舰AI模型Llama 4 Behemoth发布推迟。 Codex能并行处理多任务&…...
OAuth2.0
OAuth2.0 1. 什么是OAuth2.02.OAuth2.0的应用场景3. OAuth2.0基本概念4. 经典OAuth2.0认证流程5. 四种授权模式5.1 授权码模式(Authorization Code Grant)5.2 隐式授权(Implicit Grant)5.3 密码模式(Resource Owner Pa…...
deepin v23.1 音量自动静音问题解决
有的机器上会有音量自动静音问题, 如果你的电脑上也遇到, 这个问题是 Linux 内核的原因, ubuntu上也可能会遇到相同问题(比如你升级了最新内核6.14), 而我测试得6.8.0的内核是不会自动静音的. Index of /mainline 到上面这个链接(linux 内核的官方链接)下载6.8.0的内核, s…...
Spring Security 集成指南:避免 CORS 跨域问题
Spring Security 集成指南:避免 CORS 跨域问题 在现代 Web 应用开发中,前后端分离架构已成为主流。当我们使用 Spring Security 保护后端 API 时,经常会遇到跨域资源共享(CORS)问题。这篇文章将详细解析 Spring Secur…...
stack和queue简单模拟实现
stackreverse_iteratorqueuepriority_queue仿函数具体代码 stack Stacks are a type of container adaptor, specifically designed to operate in a LIFO context (last-in first-out), where elements are inserted and extracted only from one end of the container. 上述描…...
2.单链表两数相加(java)
题目描述: 分析: 1.首先创建一个虚拟节点 ListNode dummy new ListNode(-1);再创建一个节点来保存虚拟节点,因为使用虚拟节点来移动,如果不保存,最后就会丢失。保存虚拟节点:ListNode pdummy; 2.进位标志…...
JDBC 的编写步骤及原理详解
一、JDBC 简介 JDBC(Java DataBase Connectivity)即 Java 数据库连接,是 Java 语言用于操作数据库的一套 API。它为多种关系数据库提供了统一的访问方式,允许 Java 程序与不同类型的数据库(如 MySQL、Oracle、SQL Ser…...
AIStarter Windows 版本迎来重磅更新!模型插件工作流上线,支持 Ollama / ComfyUI 等多平台本地部署模型统一管理
如果你正在使用 AIStarter 工具进行本地 AI 模型部署 ,那么这条消息对你来说非常重要! 在最新推出的 AIStarter Windows 正式版更新中 ,官方对整个平台进行了功能重构和性能优化,尤其是新增了「模型插件工作流 」功能,…...
卸载和安装JDK
文章目录 卸载JDK安装JDK 卸载JDK 删除java的安装目录删除JAVA_HOME删除path下关于java的目录在cmd命令提示符中输入 java -version 安装JDK 浏览器搜索JDK8 下载电脑对应版本 双击安装JDK 记住安装的路径 配置环境变量 我的电脑 -> 右键 -> 属性 新建系统环境变量…...
【蓝桥杯省赛真题51】python石头运输 第十五届蓝桥杯青少组Python编程省赛真题解析
python石头运输 第十五届蓝桥杯青少年组python比赛省赛真题详细解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解 <...
USRP 射频信号 采集 回放 系统
USRP 射频信号采集回放系统 也可以叫做: 利用宽带RF录制和回放系统实现6G技术研究超宽带射频信号采集回放系统使用NI USRP平台实现射频信号录制和回放操作演示USRP也能实现多通道宽带信号流盘回放了! 对于最简单的实现方法就是使用LabVIEW进行实现 采…...
产品经理入门(2)产品体验报告
产品体验报告大纲:重点在产品体验——优点。 1.产品概括 可以从各大平台搜产品介绍。 2.市场分析 按照产品方向分析各个指标——包括有效使用时间,市场规模等。 3. 用户分析——对用户通过各项指标画像。 4.产品体验——对各项功能与设计的体验。 5.报告总结...
区块链基本理解
文章目录 前言一、什么是分布式账本(DLT)二、什么是P2P网络?二、共识算法三、密码算法前言 区块链是由一个一个数据块组成的链条,按照时间顺序将数据块逐一链接,通过哈希指针链接,所有的数据块共同维护一份分布式账本(DLT),每个节点(可以理解为一个玩家,一台计算机)都拥…...
数字万用表与指针万用表使用方法及注意事项
在电子测量领域,万用表是极为常用的工具,数字万用表和指针万用表各具特点。熟练掌握它们的使用方法与注意事项,能确保测量的准确性与安全性。下面为您详细介绍: 一 、数字万用表按钮功能 > 进入及退出手动量程模式 每 按 […...
C语言查漏补缺
1、数组初始化时,例如char arr[5] "abcde",因为字符串中有6个字符,即末尾还有个结束符,但是数组容量为5,所以仅接纳5个字符,末尾的结束符不会被接纳,故而这样的字符数组在直接输出时…...
【JDBC】JDBC常见错误处理方法及驱动的加载
MySQL8中数据库连接的四个参数有两个发生了变化 String driver "com.mysql.cj.jdbc.Driver"; String url "jdbc:mysql://127.0.0.1:3306/mydb?useSSLfalse&useUnicodetrue&characterEncodingutf8&serverTimezoneAsia/Shanghai"; 或者Strin…...
从紫光集团看基本财务分析
PE 46PE 代表投资人对他的期望是它的业绩至少要增长50%才算及格。 但实际业绩 一年不如一年. 所以,这个PE 应该是 业绩倒退了,但是市值还没有掉下去,导致运算的结果处在高PE阶段。 那么随着股价的下跌,这个数字会慢慢变小。 当然…...
软件调试纵横谈-17-win32堆的调试支持
17.Win32堆的调试支持_哔哩哔哩_bilibili 继续边看录像边做实验。 堆上的内存时用size表达的,组成一个链表。 创建一个FreCheck应用 上次看heap,直接使用下载的文件,本次要做实验了,就需要自己动手,搞个VC proje…...
CANoe CAPL TCP DoIP通信问题
目录 问题Class: TcpSocketdemo示例client注释掉配置TCP/IP stack改demo代码过滤IP,与需要的IP建立连接问题 使用CANoe进行DoIP通信时,如果是标准的DoIP节点,可以使用DoIP相关函数进行通信。 以下两篇文章是按照此方式实现的。 十六、DoIP诊断通信 1 (专栏:从零开始搭建…...
理解 plank 自动生成的 copyWithBlock: 方法
当你使用 plank 命令自动生成一个类时 ./plank --objc_class_prefix=PUG --no_runtime --no_recursive user.json分析 在 JSON 目录下, 执行如上命令后, 生成的 PUGUser 对象, 会自带 copyWithBlock: 方法, 这个方法是用来做什么的 ? copyWithBlock: (注意末尾有一个冒号,因…...
FreeCAD源码分析: Transaction实现原理
本文阐述FreeCAD中Transaction的实现原理。 注1:限于研究水平,分析难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 一、概念 Ref. from What is a Transaction? A transaction is a group of operations that have the f…...
黑马点评-用户登录
文章目录 用户登录发送短信验证码注册/登录校验登录 用户登录 发送短信验证码 public Result sendCode(String phone, HttpSession session) {// 1.校验手机号if (RegexUtils.isPhoneInvalid(phone)) {// 2.如果不符合,返回错误信息return Result.fail("手机…...
OpenAI新发布Codex的全面解析
一 . 介绍 人工智能技术的飞速发展正在重塑各行各业的运作方式,特别是在软件工程领域。随着生成式AI模型能力的不断提升,代码生成与软件开发领域正经历一场前所未有的变革。OpenAI作为人工智能领域的领军企业,其每一次技术突破都备受全球科技…...
【AI算法工程师面试指北】ResNet为什么用avgpool结构?
在ResNet(残差网络)中,最后使用平均池化(AvgPool)结构主要有以下几个关键原因,这些设计与网络的效率、性能和泛化能力密切相关: 1. 减少参数与计算量,避免过拟合 替代全连接层的冗…...
单调栈和单调队列
一、单调栈 1、使用场景 解决元素左 / 右侧第一个比他大 / 小的数字。 2、原理解释 用栈解决,目标是栈顶存储答案。 以元素左侧第一个比他小为例: (1)遍历顺序一定是从左向右。 (2)由于栈顶一定是答…...
DeepSeek-R1 Supervised finetuning and reinforcement learning (SFT + RL)
DeepSeek-R1Supervised finetuning and reinforcement learning (SFT RL) 好啊,我们今天的直播会非常透彻的跟大家系统性的分享一下整个agents AI就大模型智能体系统和应用程序。我们在做开发的时候,或者实际做企业级的产品落地的时候,你必…...
【部署】读取excel批量导入dify的QA知识库
回到目录 【部署】读取excel批量导入dify的QA知识库 0. 背景 dify的知识库支持QA模式,分段效果不算太理想,在我们的项目里面,手工编辑高质量QA文档,没有办法批量导入系统。 项目dify_import,支持读取excel文件批量导…...
Scanner对象
文章目录 Scanner对象基本语法使用next()接受使用nextLine()接受小案例总结 Scanner对象 java给我们提供了一个工具类,我们可以获取用户的输入 java.util.Scanner是java5的新特性,我们可以通过Scanner类来获取用户的输入 基本语法 Scanner s new Sc…...
Java 面向对象详解和JVM底层内存分析
先关注、点赞再看、人生灿烂!!!(谢谢) 神速熟悉面向对象 表格结构和类结构 我们在现实生活中,思考问题、发现问题、处理问题,往往都会用“表格”作为工具。实际上,“表格思维”就是…...
PIC16F18877 ADC 代码
这段代码是为PIC16F18877微控制器设计的嵌入式系统程序,主要实现了LCD显示屏控制、DHT11温湿度传感器数据采集和ADC模拟量读取三大功能。程序通过配置32MHz内部时钟源初始化系统,使用4位数据总线驱动LCD显示模块,定时读取DHT11传感器获取温湿度数据并校验,同时通过ADC通道采…...
Visual Studio2022跨平台Avalonia开发搭建
由于我已经下载并安装了 VS2022版本,这里就跳过不做阐述。 1.安装 Visual Studio 2022 安装时工作负荷Tab页勾选 “.NET 桌面开发” 和“Visual Studio扩展开发” ,这里由于不是用的微软的MAUI,所以不用选择其他的来支持跨平台开发&a…...
灵光一现的问题和常见错误1
拷贝构造函数显式写,编译器还会自动生成默认构造函数吗,还有什么函数会出现这种问题 在C中,当类显式定义某些特殊成员函数时,编译器可能不再自动生成其他相关函数。以下是详细分析: I. 显式定义拷贝构造函数对默认构造…...
React学习(二)-变量
也是很无聊,竟然写这玩意,毕竟不是学术研究,普通工作没那么多概念性东西,会用就行╮(╯▽╰)╭ 在React中,变量是用于存储和管理数据的基本单位。根据其用途和生命周期,React中的变量可以分为以下几类: 1. 状态变量(State) 用途:用于存储组件的内部状态,状态变化会触…...
我的世界模组开发——特征(2)
原版代码 AbstractHugeMushroomFeature 以下是对AbstractHugeMushroomFeature类代码的逐段解析,结合Minecraft游戏机制和蘑菇形态学特征进行说明: 1. 类定义与继承关系 public abstract class AbstractHugeMushroomFeature extends Feature<HugeMushroomFeatureConfigu…...
中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
中文名称 中国30米年度土地覆盖数据集及其动态变化(1985-2022年) 英文名称:The 30 m annual land cover datasets and its dynamics in China from 1985 to 2022 CSTR:11738.11.NCDC.ZENODO.DB3943.2023 DOI 10.5281/zenodo.8176941 数据共享方式:…...
2000 元以下罕见的真三色光源投影仪:雷克赛恩Cyber Pro1重新定义入门级投影体验
当性价比遇上技术瓶颈 在 2000元以下的1080P投影仪,单LCD 技术长期主导。而三色光源的DLP和3LCD真1080P都在4000元以上。 单LCD投影为纯白光光源,依赖CF滤光膜导致光效低下,普遍存在" 色彩失真 " 等问题。数据显示,该价…...
数学复习笔记 19
前言 向量收尾。线代大概是学了一半了。 向量 向量可以认为是一个矩阵。 线性组合 前面加一个系数就可以了。线性组合和线性表示实际上就是一个意思。 线性相关性 实际上就是内部的向量,至少有一个可以用其他向量表示出来。存在一种情况,系数不全…...
信息收集+初步漏洞打点
目标:理解信息收集在渗透测试中的意义,熟悉常用工具用法,完成基本打点测试 一.理论学习: 模块内容说明信息收集分类主动信息收集 vs 被动信息收集目标发现子域名、IP、端口、子站点、目录、接口技术指纹识别Web框架(如…...
计算机视觉与深度学习 | Python实现EMD-SSA-VMD-LSTM时间序列预测(完整源码和数据)
EMD-SSA-VMD-LSTM混合模型 一、环境配置与依赖二、数据生成(示例数据)三、多级信号分解1. 经验模态分解(EMD)2. 奇异谱分析(SSA)3. 变分模态分解(VMD) 四、数据预处理1. 归一化处理2…...
Linux线程同步信号量
什么是信号量(Semaphore)? 信号量(Semaphore) 是一种用于线程同步和进程间通信的机制,它用于控制多个线程对共享资源的访问。在 Linux 中,信号量通常用于防止多个线程同时访问有限的资源&#…...
日志系统**
1.设置日志级别 enum LogLevel{TRACE,DEBUG,INFO,WARN,ERROR,FATAL,NUM_LOG_LEVELS,}; 2.日志格式 TimeStamp 级别 内容 [2025-05-17 20:32:41][ERROR]This is an error message 3.输出:控制台/文件 4.注意 #include <chrono> #include <iomanip&g…...
【C++】18.二叉搜索树
由于map和set的底层是红黑树,同时后面要讲的AVL树(高度平衡二叉搜索树),为了方便理解,我们先来讲解二叉搜索树,因为红黑树和AVL树都是在二叉搜索树的前提下实现的 在之前的C语言数据结构章节中,我们讲过二叉树&#x…...
刘家祎双剧收官见证蜕变,诠释多面人生
近期,两部风格迥异的剧集迎来收官时刻,而青年演员刘家祎在《我家的医生》与《无尽的尽头》中的精彩演绎,无疑成为观众热议的焦点。从温暖治愈的医疗日常到冷峻深刻的少年救赎,他以极具张力的表演,展现出令人惊叹的可塑…...
python + streamlink 下载 vimeo 短视频
1. 起因, 目的: 看到一个视频,很喜欢,想下载。https://player.vimeo.com/video/937787642 2. 先看效果 能下载。 3. 过程: 因为我自己没头绪。先看一下别人的例子, 问一下 ai 或是 google问了几个来回,原来是流式…...
18-总线IIC
一、IIC 1、IIC概述 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS(飞利浦)公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间…...
【深度学习-Day 12】从零认识神经网络:感知器原理、实现与局限性深度剖析
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
力扣HOT100之二叉树:98. 验证二叉搜索树
这道题之前也刷过,自己做了一遍,发现卡在了第70多个样例,才发现自己没有利用二叉搜索树的性质,但凡涉及到二叉搜索树,应该首先考虑中序遍历!!! 被卡住的测试样例是这样的:…...
vector(c++)
前言 正式进入学习STL的第一步就是vector容器, vector是一种用于存储可变大小数组的序列容器,就像数组一样,vector也采用的连续存储空间来存储元素。本质上讲,vector使用动态分配数组来存储它的元素。底层是一个顺序表。本文介绍…...
CAPL Class: TcpSocket (此类用于实现 TCP 网络通信 )
目录 Class: TcpSocketacceptopenclosebindconnectgetLastSocketErrorgetLastSocketErrorAsStringlistenreceivesendsetSocketOptionshutdown函数调用的基本流程服务器端的基本流程客户端的基本流程Class: TcpSocket学习笔记。来自CANoe帮助文档。 Class: TcpSocket accept /…...