网络基础2
目录
跨网络传输流程
网络中的地址管理 - 认识 IP 地址
跨网络传输
报文信息的跨网络发送
IP地址的转化
认识端口号
端口号范围划分
源端口号和目的端口号
认识 TCP / UDP协议
理解 socket
网络字节序
socket 编程接口
sockaddr 结构
我们继续来学习网络基础
跨网络传输流程
网络中的地址管理 - 认识 IP 地址
IP 协议有两个版本, IPv4 和 IPv6。我们整个的课程,凡是提到 IP 协议,没有特殊说明的, 默认都是指 IPv4。
IP 地址是在 IP 协议中,用来标识网络中不同主机的地址,我们通常也使用 "点分十进制" 的字符串表示 IP 地址,例如 192.168.0.1 ; 用点 分割的每一个数字表示一个字节, 范围是 0 - 255
上图inet这里就是我这台主机的ip地址,我们使用ifconfig查到的一般都是私有ip,不是公网ip,如果 ifconfig
显示公网IP,通常意味着你的设备直接暴露在互联网上,需特别注意安全防护!
跨网段的主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或 多个路由器。
IP地址(特指公网IP)可以在全球互联网范围内唯一标识一台主机,mac地址是在局域网标识一台主机的唯一性,二者的本质区别就是,一个报文从发送到被接受时,其携带的源ip地址和目的ip地址一般是不变的,假设这个报文需要通过主机或者路由器中转,那mac地址会由于中转的作用而发生改变,每经过一个路由器或者主机其源mac地址和目的地址就会发生改变,一般经过路由器时会重新分配mac帧,此时变成跨网段通信了,mac地址的格式就发生了比较大的改变,这时这个mac地址就不属于原本的局域网的了。所以一般而言,mac地址只在局域网中有效!!!
在一个局域网内,报文每经过一个主机(不是目标主机)就将这个主机的网卡的mac地址作为新的源mac地址,然后把其要去到的下一个主机的网卡mac地址作为目标的mac地址。经过路由器时mac地址由路由器重新分配。
跨网络传输
跨网络传输一般直接使用ip地址,需要使用路由器这个硬件进行跨网络的传输,跨网段的主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或 多个路由器。由图可以看出路由器有自己的ip地址,并且可以被左右两边不同网络的主机识别,一个以太网的程序进入路由器中,然后经由路由器传入一个使用令牌环驱动的网络,反之亦如此,这里主要是想体现不同技术实现的网络可以进行传输,所以路由器肯定有这两种网络程序兼容的接口,一定兼容这两种网络,并且这两种网络的网络层协议一定是一样的,不然不能通信。
令牌环网(Token Ring) 是一种早期的局域网(LAN)技术,由IBM在1980年代推出,遵循 IEEE 802.5 标准。它的核心特点是 通过“令牌”(Token)控制网络访问权限,确保数据有序传输,避免冲突(与以太网的CSMA/CD机制不同)。令牌(Token) 是一个特殊的短帧,在网络中单向循环传递。只有拿到令牌的设备才能发送数据,发送完成后必须释放令牌给下一台设备。效率一看就是比较低的,图上的令牌环里面有很多的主机。
以太网(Ethernet) 是现代局域网(LAN)和互联网的核心通信技术,由Xerox、Intel和DEC在1970年代开发,现由 IEEE 802.3 标准规范。它的核心特点是 使用“竞争式”访问机制(CSMA/CD) 实现设备间的数据传输,支持从家庭网络到数据中心的广泛应用。
报文信息的跨网络发送
一个报文通过封装报头的方式传输到网卡准备发送到别的主机,这时源主机发现目标的ip地址和源ip地址不在同一个网段就会直接交给路由器,然后路由器连接着两个不同的网络,这时会进行判断是不是另一个网络的,如果是的话就根据修改报文的mac帧使其和另一个网络的mac地址格式一致,然后交给另一个网络的目标主机,如果路由器发现还是和另一个网络不一致,就会继续路由,交给下一个路由器,如果这个目标ip地址是属于和源ip地址是同一个网段的,就直接交给同一个网段的目标主机,这时传输使用的是mac地址和ip地址以及路由器无关了,反正你记住在同一个网段内传输使用的是mac地址,在不同网段之间传输使用的是ip地址,也仅仅是跨网络的那一刻使用的是ip地址进行判断的。
在ip网络中一切皆ip,同一个网段下的所有主机的ip地址都是由这个网段里面的路由器分配的。
用户主机可以和路由器进行传输,说明他们的网络层协议是相同的,说明路由器也是分层的。可以看到路由器内部有网络层和数据链路程
IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽 最底层网络的差异。
IP地址的转化
IP地址有点分十进制的标识方法,这种方法具有很强的可读性,然而这种一长串字符串的表示方法在网络通信中不使用,在网络通信中IP地址被表示为4个以点分割的字符相当于char.char.char.char,每个字节对应一个 点分十进制(Dotted Decimal Notation) 的数值(如 192.168.1.1
)。unsigned char
可以存储 0~255 的数值,正好适合存储IP地址的每个部分(0~255)。这种4字节的ip和之前的一长串的字符串ip是可以互相转换的。
怎么转呢,有函数可以进行帮助转化,我们后面实战的时候再说,原理就是,IP的结构可以是一个结构体吧,吧其内部装着的4个char类型的字符都提取出来进行to_string转换成字符串然后用.连接,之间+.,这样就拼接成点分十进制的了,反过来也是同理。
认识端口号
端口号(port)是传输层协议的内容,端口号是一个 2 字节 16 位的整数,端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来 处理,IP 地址 + 端口号能够标识网络上的某一台主机的某一个进程,一个主机里面可以有很多个端口号,一个端口号只能被一个进程占用。
数据传输到主机不是目的,而是手段。到达主机内部,在交给主机内的进程, 才是目的。交给主机内的进程就需要标识主机的唯一性,这些端口号都是报文传输时已经知道了的或者人工设置进去的,那为什么标识唯一进程不使用进程的pid呢,这样不就和进程的管理/调度强耦合了吗,网络部分为了不被操作系统内核影响就新增了端口号。怎么通过端口号找到进程的,这里相当于使用了哈希表的映射,将下标定义为端口号,然后内容介绍进程的pcb,这样只需要查找端口号哈希表然后映射着找到进程pcb,再进而找到所对应的进程,然后通过文件描述符找到网络。一切皆文件,在Linux的操作系统看来网络就是文件。
端口号范围划分
0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议,他们的 端口号都是固定的,1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号,就是由操作 系统从这个范围分配的。
所以一般设置端口号不能设置这些知名的端口号,防止访问冲突。
另外, 一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定。
源端口号和目的端口号
传输层协议(TCP 和 UDP)的数据段中有两个端口号, 分别叫做源端口号和目的端口号. 就是在描述 "数据是哪个进程发的, 要发给哪个进程"。
认识 TCP / UDP协议
此处我们先对 TCP(Transmission Control Protocol 传输控制协议)有一个直观的认识,后面我们再详细讨论 TCP 的一些细节问题。
此处我们也是对 UDP(User Datagram Protocol 用户数据报协议)有一个直观的认识,后 面再详细讨论。
面向字节流就是数据像水流一样连续,发送方写入的多次数据可能被接收方一次性读取(或反之)。例如:发送方分3次发送 "Hello"
、"World"
、"!"
,接收方可能一次性收到 "HelloWorld!"
。
面向数据报就是每次发送的数据是一个独立单元,接收方必须按完整单元读取,例如:发送方分3次发送 "Hello"
、"World"
、"!"
,接收方会收到3次独立的数据包。
UDP的不可靠传输是其特点,不是缺点,是低延迟、能容忍丢包的传输方式。
理解 socket
综上,IP 地址用来标识互联网中唯一的一台主机,port 用来标识该主机上唯一的 一个网络进程,网络的本质就是进程间的通信,我们把 ip+port 叫做套接字 socket,我们可以通过创建套接字发方式进行本地或者跨网络通信。套接字是通用通信接口。
网络字节序
我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的 多字节数据相对于文件中的偏移地址也有大端小端之分,网络数据流同样有大端小端之 分。那么如何定义网络数据流的地址呢?
发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从 低到高的顺序保存,那接收的主机和发生的主机如果大小端不一数据不就发送和读取不一致了吗,所以TCP/IP 协议规定,网络数据流应采用大端字节序,即低地址高字节,介绍发送到网络中的数据必须才用大端字节序保证数据的接发的一致性,在主机中的数据随意,该转小端存储转小端,发送方该转大端转大端。
为使网络程序具有可移植性,使同样的 C 代码在大端和小端计算机上编译后都能正常运 行,可以调用以下库函数做网络字节序和主机字节序的转换。
socket 编程接口
sockaddr 结构
我们这里不做接口的介绍,仅仅解释sockaddr是什么。
socket编程可以实现局域网通信以及跨网络通信,所以socket的种类分为网络socket,本地socket,和原始socket,本地socket就是unix域间通信,就是管道。
我们可以看到上面这些套接字编程接口函数都有一个参数是struct sockaddr*,struct sockaddr是一个“地址结构体”!它的作用是告诉内核:“我的这个套接字要绑定/连接到哪里。”,所以其结构体内部会有这个套接字所对应的端口号和ip地址,然后struct sockaddr_in是是用于 IPv4 网络编程 的结构体,表示一个网络套接字的地址信息(IP + 端口),in就是inet的简写,struct sockaddr_un是表示本地套接字的地址信息,un就是unix的接口。
这些结构体里面都必须要有端口号,ip地址以及一个8字节的填充。那么多种socket需要通信,操作系统需要提供每种套接字的系统调用,所以OS将这些socket接口统一了,到时候统一传入struct sockaddr*,那怎么区分是那种socket,所以实际传入的是原本socket的自己强制性转换成struct sockaddr*的版本,怎么强制性转换的呢,这些struct sockaddr_in/struct sockaddr_un会在里面提供一个16位地址类型网络socket的就是AF_INET,本地socket就是AF_UNIX。这些都是宏,相当于用原本的socket转换成了统一的版本,然后回根据这些16位的宏进行判断转换的是什么,再执行对应的通信策略。
IPv4、IPv6 地址类型分别定义为常数 AF_INET、AF_INET6. 这样,只要取得某 种 sockaddr 结构体的首地址,不需要知道具体是哪种类型的 sockaddr 结构体,就可 以根据地址类型字段确定结构体中的内容。
最后,这样转换的操作使得不同的struct变成同一个struct,然后执行不同的通信效果,这不就是多态吗,struct sockaddr不是套接字,而是套接字要绑定或连接的“地址”信息,就是创建套接字是需要填充struct sockaddr里面的ip,端口号等信息的。
Socket 既是“IP + 端口”的组合,也是文件描述符,但这两者描述的是 Socket 的不同层面。
相关文章:
网络基础2
目录 跨网络传输流程 网络中的地址管理 - 认识 IP 地址 跨网络传输 报文信息的跨网络发送 IP地址的转化 认识端口号 端口号范围划分 源端口号和目的端口号 认识 TCP / UDP协议 理解 socket 网络字节序 socket 编程接口 sockaddr 结构 我们继续来学习网络基础 跨网…...
Maven工具学习使用(十一)——部署项目到仓库
1、使用Maven默认方式 Maven 部署项目时默认使用的上传文件方式是通过 HTTP/HTTPS 协议。要在 Maven 项目中配置部署,您需要在项目的 pom.xml 文件中添加 部分。这个部分定义了如何部署项目的构件(如 JAR 文件)到仓库。。这个部分定义了如何…...
FPGA 37 ,FPGA千兆以太网设计实战:RGMII接口时序实现全解析( RGMII接口时序设计,RGMII~GMII,GMII~RGMII 接口转换 )
目录 前言 一、设计流程 1.1 需求理解 1.2 模块划分 1.3 测试验证 二、模块分工 2.1 RGMII→GMII(接收方向,rgmii_rx 模块) 2.2 GMII→RGMII(发送方向,rgmii_tx 模块) 三、代码实现 3.1 顶层模块 …...
torch.cat和torch.stack的区别
torch.cat 和 torch.stack 是 PyTorch 中用于组合张量的两个常用函数,它们的核心区别在于输入张量的维度和输出张量的维度变化。以下是详细对比: 1. torch.cat (Concatenate) 作用:沿现有维度拼接多个张量,不创建新维度 输入要求…...
索引下推(Index Condition Pushdown, ICP)
概念 索引下推是一种数据库查询优化技术,通过在存储引擎层面应用部分WHERE条件来减少不必要的数据读取。它特别适用于复合索引的情况,因为它可以在索引扫描阶段就排除不符合全部条件的数据行,而不是将所有可能匹配的记录加载到服务器层再进行…...
C++基础精讲-06
文章目录 1. this指针1.1 this指针的概念1.2 this指针的使用 2. 特殊的数据成员2.1 常量数据成员2.2 引用数据成员2.3 静态数据成员2.4 对象成员 3. 特殊的成员函数3.1 静态成员函数3.2 const成员函数3.3 mutable关键字 1. this指针 1.1 this指针的概念 1.c规定,t…...
Django3 - 建站基础
学习开发网站必须了解网站的组成部分、网站类型、运行原理和开发流程。使用Django开发网站必须掌握Django的基本操作,比如创建项目、使用Django的操作指令以及开发过程中的调试方法。 一、网站的定义及组成 网站(Website)是指在因特网上根据一定的规则,…...
UE5蓝图设置界面尺寸大小
UE5蓝图设置界面尺寸大小 Create widget 创建UIadd to Viewport 添加视图get Game User Settings获取游戏用户设置set Screen Resolutions 设置屏幕尺寸大小1920*1080set Fullscreen Mode 设置全屏模式为:窗口化或者全屏Apply Settings 应用设置...
无数字字母RCE
无数字字母RCE,这是一个老生常谈的问题,就是不利用数字和字母构造出webshell,从而能够执行我们的命令。 <?php highlight_file(__FILE__); $code $_GET[code]; if(preg_match("/[A-Za-z0-9]/",$code)){die("hacker!&quo…...
AutoGen参数说明
UserProxyAgent用户 user_proxy = UserProxyAgent配置说明: # 构造参数 def __init__(self,name: str,is_termination_msg: Optional[Callable[[Dict], bool]] = None,max_consecutive_auto_reply: Optional[int] = None,human_input_mode: Literal["ALWAYS", &qu…...
6.2 GitHub API接口设计实战:突破限流+智能缓存实现10K+仓库同步
GitHub Sentinel 定期更新 API 接口设计 关键词:GitHub API 集成、异步爬虫开发、RESTful 接口设计、请求限流策略、数据增量更新 1. 接口架构设计原则 采用 分层隔离架构 实现数据采集与业务逻辑解耦: #mermaid-svg-WihvC78J0F5oGDbs {font-family:"trebuchet ms&quo…...
用java代码如何存取数据库的blob字段
一.业务 在业务中我们被要求将文件或图片等转成 byte[] 或 InputStream存到数据库的Blob类型的字段中. 二.Blob类型介绍 在 MySQL 中,Blob 数据类型用于存储二进制数据。MySQL 提供了四种不同的 Blob 类型: TINYBLOB: 最大存储长度为 255 个字节。BL…...
2025蓝桥杯C++研究生组真题-上海市省赛
2025蓝桥杯C研究生组真题 A:数位倍数(5分) 问题描述:请问在 1 至 202504(含)中,有多少个数的各个数位之和是 5 的整数倍。例如:5、19、8025 都是这样的数。 A是填空题,…...
原子操作CAS(Compare-And-Swap)和锁
目录 原子操作 优缺点 锁 互斥锁(Mutex) 自旋锁(Spin Lock) 原子性 单核单CPU 多核多CPU 存储体系结构 缓存一致性 写传播(Write Propagation) 事务串行化(Transaction Serialization&#…...
Aspose.Words导出word,服务器用内存流处理,不生成磁盘文件
框架集:.NET8 public async Task<IActionResult> ExportPDF(long? id) {var infoawait form_Dahui_ReportDao.GetAsync(id);if (info null){return Content("没找到数据");}//读取word模板string fileTemp Path.Combine(AppContext.BaseDirect…...
攻防世界——Web题ez_curl
目录 Express PHP和Node.js的解析差异 Python代码 这道题最终得不到flag,用了很多师傅的代码也不成功。但还是需要学习 下载的附件: const express require(express);const app express();const port 3000; const flag process.env.flag;app.ge…...
力扣面试150题--螺旋矩阵
Day 20 题目描述 思路 根据题目描述,我们需要顺时针输出矩阵元素,顺时针说明有四种输出状态,横向从左到右和从右到左,纵向从上到下和从下到上,唯一的难点在于,输出完成一层后,如何进入内层&am…...
智能指针之设计模式2
前面介绍了工厂模式控制了智能指针和资源对象的创建过程,现在介绍一下智能指针是如何利用代理模式来实现“类指针(like-pointer)”的功能,并控制资源对象的销毁过程的。 2、代理模式 代理模式是为其它对象提供一种代理以控制对这…...
【Redis】redis持久化
Redis 持久化 Redis:非关系型的内存数据库 持久化:将数据永久写入磁盘(内存→磁盘) Redis 默认开启了持久化,默认模式为 RDB 为什么需要持久化? Redis 是内存数据库,宕机或关机后数据会丢失。…...
AtCoder Beginner Contest 401 E题 题解
E - Reachable Sethttp://E - Reachable Set 题意概述 : 给定一个无向图, 对于每个 ,解决以下问题: -选择最少的一些顶点,使得删除这些顶点及其关联的所有边后 点1只能到达以内的所有点 牵制芝士 :头文…...
Kubernetes控制平面组件:API Server Webhook 授权机制 详解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
【CodeMirror】系列(二)官网示例(六)自动补全、边栏
一、自动补全 codemirror/autocomplete 包提供了在编辑器中显示输入建议的功能。这个示例展示了如何启用该功能以及如何编写自己的补全来源。 自动补全是通过在编辑器的配置项中加入 autocompletion 扩展实现的。有些语言包支持内置的自动补全功能,比如HTML包。 默…...
CSS 表格样式学习笔记
CSS 提供了强大的工具来美化和定制 HTML 表格的外观。通过合理使用 CSS 属性,可以使表格更加美观、易读且功能强大。以下是对 CSS 表格样式的详细学习笔记。 一、表格边框 1. 单独边框 默认情况下,表格的 <table>、<th> 和 <td> 元…...
简单记录一下Android四大组件
1、Android Layout 1.1、LinearLayout 线性布局,子控件按照水平或垂直的方向依次排列,排列方向通过属性android:orientation控制,horizontal为水平排列,vertical为垂直排列。对于同一水平线上的控件,可以调整它的lay…...
在线地图支持天地图和腾讯地图,仪表板和数据大屏支持发布功能,DataEase开源BI工具v2.10.7 LTS版本发布
2025年4月11日,人人可用的开源BI工具DataEase正式发布v2.10.7 LTS版本。 这一版本的功能变动包括:数据源方面,Oracle数据源支持获取和查询物化视图;图表方面,在线地图支持天地图、腾讯地图;新增子弹图&…...
【图像处理基石】什么是通透感?
一、画面的通透感定义 画面的通透感指图像在色彩鲜明度、空间层次感、物体轮廓清晰度三方面的综合表现,具体表现为: 色彩鲜明:颜色纯净且饱和度适中,无灰暗或浑浊感;层次分明:明暗过渡自然,光…...
猫咪如厕检测与分类识别系统系列【六】分类模型训练+混合检测分类+未知目标自动更新
前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的如…...
NoSQL入门指南:Redis与MongoDB的Java实战
一、为什么需要NoSQL? 在传统SQL数据库中,数据必须严格遵循预定义的表结构,就像把所有物品整齐摆放在固定尺寸的货架上。而NoSQL(Not Only SQL)数据库则像一个灵活的储物间,允许存储各种类型的数据&#x…...
游戏引擎学习第223天
回顾 今天我们正在进行过场动画序列的制作,因此我想深入探讨这个部分。昨天,我们暂时停止了过场动画的制作,距离最终结局还有一些内容没有完成。今天的目标是继续完成这些内容。 我们已经制作了一个过场动画的系列,并把它们集中…...
【redis进阶二】分布式系统之主从复制结构(1)
目录 一 为什么要有分布式系统? 二 分布式系统涉及到的非常关键的问题:单点问题 三 学习部署主从结构的redis (1)创建一个目录 (2)进入目录拷贝两份原有redis (3)使用vim修改几个选项 (4)启动两个从节点服务器 (5)建立复制,要想配…...
(自用)若依生成左树右表
第一步: 在数据库创建树表和单表: SQL命令: 商品表 CREATE TABLE products (product_id INT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(255) , price DECIMAL(10, 2) , stock INT NOT NULL, category_id INT NOT NULL); 商品分类…...
VectorBT量化入门系列:第六章 VectorBT实战案例:机器学习预测策略
VectorBT量化入门系列:第六章 VectorBT实战案例:机器学习预测策略 本教程专为中高级开发者设计,系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标,深度探索策略开发、回测优化与风险评估的核心方法…...
5G网络下客户端数据业务掉线频繁
MCPTT(Mission Critical Push-to-Talk)客户端的日志,和界面在待机状态下(即没有做通话等业务操作),会频繁提示“离线”。 主要先看有没有丢网,UL BLER有没有问题。确认没有问题。看到业务信道释…...
CPU(中央处理器)
一、CPU的定义与核心作用 CPU 是计算机的核心部件,负责 解释并执行指令、协调各硬件资源 以及 完成数据处理,其性能直接影响计算机的整体效率。 核心功能: 从内存中读取指令并译码。执行算术逻辑运算。控制数据在寄存器、内存和I/O设备间的…...
Java从入门到“放弃”(精通)之旅——程序逻辑控制④
Java从入门到“放弃”(精通)之旅🚀:程序逻辑的完美理解 一、开篇:程序员的"人生选择" 曾经的我,生活就像一段顺序执行的代码: System.out.println("早上8:00起床"); Syste…...
[Dify] 基于明道云实现金融业务中的Confirmation生成功能
在金融业务的日常流程中,交易记录的处理不仅涉及数据录入、流程审批,更重要的是其最终输出形式——交易确认函(Confirmation)。本文将介绍如何通过明道云的打印模板功能,快速、准确地生成符合业务需求的交易Confirmation,提升工作效率与合规性。 为什么需要Confirmation?…...
Qt安卓设备上怎么安装两个不同的Qt应用?
在安卓设备上安装两个不同的Qt应用时,需要确保这两个应用在安卓系统中被视为独立的应用程序。以下是详细的步骤和注意事项,帮助你实现这一目标: 一、修改应用的包名 安卓系统通过应用的包名(package属性)来区分不同的…...
Prompt工程提示词(1-6章)
White graces:个人主页 🐹今日诗词:怅望千秋一洒泪,萧条异代不同时🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 目录 🚀 第…...
0基础 | 硬件滤波 C、RC、LC、π型
一、滤波概念 (一)滤波定义 滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的重要措施。通过滤波器实现对特定频率成分的筛选,确保目标信号的纯净度,提升系统稳定性。 (二)滤波器分…...
C++ 编程指南34 - C++ 中 ABI 不兼容的典型情形
一:概述 ABI(Application Binary Interface)是二进制层面的接口规范。如果一个库的 ABI 发生了变化,那么基于旧 ABI 编译的代码可能在运行时与新库不兼容(即使接口名字都一样也不行)。那么在C++中编程中,哪些情形会导致ABI不兼容呢?下面逐一列举一下。 二:C++ 中 ABI…...
【动态规划】深入动态规划:背包问题
文章目录 前言01背包例题一、01背包二、分割等和子集三、目标和四、最后一块石头的重量|| 完全背包例题一、完全背包二、 零钱兑换三、零钱兑换||四、完全平方数 前言 什么是背包问题,怎么解决算法中的背包问题呢? 背包问题 (Knapsack problem) 是⼀种组…...
NVIDIA AI Aerial
NVIDIA AI Aerial 适用于无线研发的 NVIDIA AI Aerial 基础模组Aerial CUDA 加速 RANAerial Omniverse 数字孪生Aerial AI 无线电框架 用例构建商业 5G 网络加速 5G生成式 AI 和 5G 数据中心 加速 6G 研究基于云的工具 优势100% 软件定义通过部署在数字孪生中进行测试6G 标准化…...
计算机视觉6——相机基础
一、数字相机基本工作原理 (一)像素概念 数字相机生成二维图像,图像最小单元是像素。 每个像素对应三维世界中某个特定方向,像素值衡量某一时刻来自该方向的光照强度/颜色 ,即相机度量每个像素的光照情况并保存到对…...
入门到精通,C语言十大经典程序
以下是十个经典的C语言程序示例,这些程序涵盖了从基础到稍复杂的应用场景,适合初学者和有一定基础的开发者学习和参考。 1. Hello, World! 这是每个初学者学习编程时的第一个程序,用于验证开发环境是否正确配置。 #include <stdio.h>…...
【毕设】Python构建基于TMDB电影推荐系统
个性化电影推荐系统 这是一个基于FastAPI开发的现代化电影推荐系统,结合了协同过滤和深度学习技术,为用户提供个性化的电影推荐服务。 主要功能 🎯 个性化电影推荐🔍 电影搜索与浏览⭐ 电影评分系统💝 收藏夹功能&a…...
嵌入式常见概念的介绍
目录 一、MCU、MPU、ARM (一)MCU(微控制器) (二)MPU(微处理器) (三)ARM(架构) 二、DSP (一)数字信号处理…...
富兴号:拨云见日,打造普洱品质典范
在高端普洱茶市场的混沌格局中,价格与品质的天平严重失衡,消费者往往深陷 “高价却难觅好茶” 的困境。而新兴品牌富兴号强势崛起,奋力冲破这一迷局,致力于重塑 “号级茶” 的卓越品质,为茶叶赋予珍贵的品鉴与收藏价值…...
【WORD】批量将doc转为docx
具体步骤进行: 打开Word文档,按下AltF11快捷键,打开VBA编辑器。在VBA编辑器中,左侧的“项目资源管理器”窗口会显示当前打开的Word文档相关项目。找到您要添加代码的文档项目(通常以文档名称命名)…...
Linux内存管理架构(1)
0.内存空间架构 1.用户空间 在 Linux 系统中,应用程序通过 malloc() 申请内存,并通过 free() 释放内存时,底层的内存管理是由 glibc(GNU C Library)中的内存分配器实现的。glibc 的内存分配器负责与操作系统的内核交互…...
Ubuntu 各个常见长期支持历史版本与代号
文章目录 1. Ubuntu 历史版本与代号2. 查看当前系统版本 在 Ubuntu 操作系统里,每个版本都有一个别具特色的名字。该名字由一个形容词与一个动物名称构成,且形容词和动物名称的首字母是一样的。例如 “Warty Warthog(长疣的疣猪)”…...