mmap核心原理和用途及其与内存映射段的关系
mmap
是 Linux/Unix 系统中的一个关键系统调用,全称是 Memory Map(内存映射)。它的核心功能是将 文件、设备或匿名内存 直接映射到进程的虚拟地址空间,从而实现高效的内存访问和操作。以下是其核心原理和用途的详细说明:
1. 核心功能
- 内存映射文件:将文件内容映射到进程的虚拟内存中,直接通过指针读写文件,无需传统的
read
/write
系统调用。 - 匿名内存映射:分配不关联任何文件的纯内存块(类似
malloc
,但更灵活)。 - 共享内存:多个进程可映射同一块内存,实现高效进程间通信(IPC)。
2. 工作原理
-
系统调用原型:
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
-
参数说明:
addr
:建议的映射起始地址(通常设为NULL
,由内核自动选择)。length
:映射区域的长度(需按页对齐,如 4KB)。prot
:内存保护权限(如PROT_READ | PROT_WRITE
)。flags
:映射类型(MAP_SHARED
共享内存,MAP_PRIVATE
私有副本,MAP_ANONYMOUS
匿名内存等)。fd
:文件描述符(匿名映射时设为-1
)。offset
:文件映射的起始偏移量(通常为 0)。
-
返回值:成功返回映射区域的起始地址,失败返回
MAP_FAILED
。
3. 主要用途
(1) 高效文件 I/O
- 直接读写内存:映射文件后,操作内存即操作文件,避免频繁的
read
/write
系统调用。 - 惰性加载:文件内容按需加载到内存(缺页中断机制),适合处理大文件。
- 示例:
int fd = open("data.txt", O_RDWR); char *ptr = mmap(NULL, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); ptr[0] = 'A'; // 直接修改文件内容 munmap(ptr, file_size); // 解除映射
(2) 动态内存分配
- 替代
malloc
:malloc
在分配大块内存时可能使用mmap
(通过MAP_ANONYMOUS
标志)。 - 匿名内存映射:
void *mem = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
(3) 进程间共享内存(IPC)
- 共享内存通信:多个进程映射同一文件或匿名内存,共享数据。
- 示例:
// 进程 A void *shm = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); sprintf(shm, "Hello from Process A");// 进程 B(映射同一文件) printf("%s\n", (char*)shm); // 输出 "Hello from Process A"
(4) 实现零拷贝(Zero-Copy)
- 避免数据复制:网络传输或文件操作时,直接映射内存到用户空间,减少内核与用户空间的数据拷贝。
4. 与 malloc
/brk
的对比
特性 | mmap | malloc /brk |
---|---|---|
内存来源 | 文件、匿名内存、共享内存 | 堆内存(通过 brk 或 sbrk ) |
分配粒度 | 按页(如 4KB) | 按字节(实际可能按块管理) |
碎片问题 | 较少(大块独立映射) | 较多(频繁分配释放导致碎片) |
适用场景 | 大内存分配、文件映射、IPC | 常规小内存分配 |
性能开销 | 初始映射开销大,后续访问快 | 分配速度快,但碎片可能影响性能 |
5. 优缺点
- 优点:
- 高效文件操作:减少系统调用和数据拷贝。
- 共享内存:跨进程通信速度快。
- 灵活内存管理:支持动态调整映射区域(
mremap
)。
- 缺点:
- 内存对齐要求:映射长度需按页对齐。
- 资源泄漏风险:需手动调用
munmap
释放。 - 文件同步问题:修改后需调用
msync
确保数据写入磁盘。
6. 关键注意事项
- 错误处理:检查返回值是否为
MAP_FAILED
,并用perror
诊断错误。 - 释放内存:使用
munmap
释放映射区域,不可用free
! - 同步数据:修改文件映射后,调用
msync
确保数据持久化。 - 线程安全:多线程中操作同一映射区域需加锁。
7. 示例代码(匿名内存分配)
#include <sys/mman.h>int main() {size_t size = 4096; // 1 页大小// 分配匿名内存(可读可写)void *mem = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);if (mem == MAP_FAILED) {perror("mmap failed");return 1;}// 使用内存memset(mem, 0, size);// 释放munmap(mem, size);return 0;
}
8.mmap与内存映射段
mmap
与 内存映射段(Memory-Mapped Segment)是操作系统内存管理中的两个紧密相关的概念。mmap
是用户态操作内存映射段的接口,而内存映射段是进程虚拟地址空间中用于存储映射内容(如文件、共享内存等)的区域。以下是二者的关系及详细说明:
(1) 内存映射段是什么?
在进程的虚拟地址空间中,内存映射段(也称为 内存映射区域)是专门用于存放通过 mmap
系统调用映射的内容的区域。其典型位置如下(以 Linux 进程地址空间为例):
高地址
┌───────────────────────┐
│ 栈(Stack) │
├───────────────────────┤
│ … │
├───────────────────────┤
│ 堆(Heap) │ ← 通过 brk/sbrk
或 malloc
分配
├───────────────────────┤
│ 内存映射段(Memory-Mapped Region)│ ← 通过 mmap
映射的内容
├───────────────────────┤
│ 未初始化数据段(BSS) │
├───────────────────────┤
│ 已初始化数据段(Data) │
├───────────────────────┤
│ 代码段(Text) │
└───────────────────────┘
低地址
内存映射段的特点:
- 动态扩展:大小由
mmap
的映射操作决定,可动态增长或收缩。 - 多种用途:可包含文件映射、共享内存、匿名内存等。
- 分页管理:按页(如 4KB)对齐,由内核通过缺页中断(Page Fault)按需加载数据。
(2) mmap
如何操作内存映射段?
mmap
是用户程序与内存映射段交互的核心接口,具体行为如下:
① 映射文件到内存映射段
- 通过
mmap
将文件内容映射到内存映射段,进程通过指针直接读写文件,无需read
/write
。 - 示例:
int fd = open("data.txt", O_RDWR); char *ptr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); // ptr 指向内存映射段中的文件内容 ptr[0] = 'X'; // 直接修改文件 munmap(ptr, 4096); // 解除映射
② 分配匿名内存
- 使用
MAP_ANONYMOUS
标志创建不关联文件的纯内存块,常用于替代malloc
分配大内存。 - 示例:
void *mem = mmap(NULL, 1024*1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); // mem 指向内存映射段中的匿名内存
③ 共享内存(IPC)
- 多个进程通过
mmap
映射同一文件或匿名内存,实现高效数据共享。 - 示例:
// 进程 A void *shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); sprintf(shm, "Hello");// 进程 B(映射同一文件) printf("%s\n", (char*)shm); // 输出 "Hello"
(3) 内存映射段的管理机制
① 分页与缺页中断
- 内存映射段的内容按页(如 4KB)管理。
- 初次访问映射区域时触发 缺页中断,内核将文件内容或物理内存加载到页表中。
② 写时复制(Copy-on-Write)
- 若使用
MAP_PRIVATE
标志,修改内存映射段时会触发写时复制,生成进程私有的副本。
③ 同步与持久化
- 修改文件映射后,需调用
msync
强制将内存中的数据写回磁盘。 - 匿名映射的内容随进程结束自动释放。
(4) mmap
与内存映射段的关系总结
特性 | mmap 系统调用 | 内存映射段 |
---|---|---|
角色 | 操作接口(用户态函数) | 存储区域(进程地址空间的一部分) |
功能 | 创建、删除、调整内存映射 | 存放文件、共享内存、匿名内存等内容 |
生命周期 | 显式调用 mmap 和 munmap 控制 | 由内核管理,随进程终止或 munmap 释放 |
性能优化 | 减少数据拷贝、支持零拷贝 | 按需加载(惰性分配)、分页管理 |
(5) 常见问题
① mmap
分配的匿名内存与堆内存(malloc
)有何区别?
- 匿名内存:位于内存映射段,按页分配,适合大块内存,释放直接通过
munmap
。 - 堆内存:通过
brk/sbrk
或malloc
分配,位于堆段,适合小块内存,可能产生碎片。
② 内存映射段会占用物理内存吗?
- 不会立即占用。内核通过缺页中断按需分配物理内存(惰性加载)。
③ 内存映射段的大小限制?
- 受进程虚拟地址空间限制(如 32 位系统最大 4GB,64 位系统理论极大)。
(6) 总结
mmap
是操作内存映射段的工具,内存映射段是mmap
映射内容的存储区域。- 文件映射、共享内存、匿名内存分配等均通过
mmap
在内存映射段中实现。 - 理解二者的关系,有助于优化文件 I/O、内存分配和进程间通信的设计。
通过 mmap
,开发者可以直接操控内存与文件、设备或共享内存的关系,这在处理高性能 I/O、内存数据库、跨进程通信等场景中非常有用。理解其原理和适用场景,能显著优化程序的效率和资源管理能力。
创作不易,希望大家多多支持,有什么想法欢迎讨论🌹🌹
相关文章:
mmap核心原理和用途及其与内存映射段的关系
mmap 是 Linux/Unix 系统中的一个关键系统调用,全称是 Memory Map(内存映射)。它的核心功能是将 文件、设备或匿名内存 直接映射到进程的虚拟地址空间,从而实现高效的内存访问和操作。以下是其核心原理和用途的详细说明࿱…...
深入理解 Web Service:原理、组件与核心技术详解
目录 前言1 Web Service 概述2 Web Service 的三大核心角色2.1 服务提供者(Service Provider)2.2 服务请求者(Service Consumer)2.3 服务注册中心(Service Registry) 3 Web Service 核心技术详解3.1 WSDL&a…...
【动态导通电阻】GaN功率器件中动态导通电阻退化的机制、表征及建模方法
2019年,浙江大学的Shu Yang等人在《IEEE Journal of Emerging and Selected Topics in Power Electronics》上发表了一篇关于GaN(氮化镓)功率器件动态导通电阻(Dynamic On-Resistance, RON)的研究论文。该文深入探讨了GaN功率器件中动态导通电阻退化的机制、表征方法、建模…...
AWS SQS 队列策略配置指南:常见错误与解决方案
在 AWS 云服务中,Simple Queue Service (SQS) 是一种完全托管的消息队列服务,广泛应用于分布式系统组件间的解耦。为了确保队列的安全访问,正确配置队列策略至关重要。本文将详细介绍 SQS 队列策略的配置方法,常见错误及其解决方案。 SQS 队列策略基础 SQS 队列策略是基于…...
【后端】【Docker】 Docker 动态代理 取消代理完整脚本合集(Ubuntu)
🚀 Docker 动态代理 & 取消代理完整脚本合集(Ubuntu) 一、动态设置 Docker 代理脚本 支持自定义输入代理地址和端口! 📄 脚本内容(保存为 set_docker_proxy.sh) #!/bin/bash# 读取用户输入 read -p "请输入…...
Java基础学习内容大纲
Java基础学习内容大纲 第一阶段:建立编程思想 Java概述:如何快速学习Java技术、Java历史、Java特点、Sublime、Java运行机制、JDK、转义字符、Java开发规范、Java API 变量:数据类型、变量基本使用、数据类型转换 运算符:运算符介绍、算数运算符、关系运算符、…...
[USACO08DEC] Hay For Sale S Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int c sc.nextInt(); // 背包容量int h sc.nextInt(); // 物品数量int[] v new int[h 1];for (int i 1; i < h; i) v[i] sc.nextInt();int[] dp …...
碰到的 MRCPv2 串线以及解决思路
最近碰到了一个朋友的 MRCPv2 串线,表现大约是: fs1 和 fs2 同时发到 mrcp server 的同一个 rtp 端口 目前尚不清楚 mrcp server 是否能避免这种情况(其实是有思路的,接收到 rtp 包时检查网络地址和网络端口跟 sip 协商的是否一…...
AI正当时,国内AI HR领先厂商易路如何从“单点突破”到“全面融合”
所谓AI HR,是指将人工智能(AI)技术(如机器学习、自然语言处理、大数据分析等)应用于人力资源管理的各个环节,以提升效率、优化决策并改善员工体验。典型场景有: 在招聘、考勤、薪酬计算等重复…...
MCP 哪家强?深度分析 Cline、Cursor、Trae、Coze 四大平台
想象一下:你只需一句话,AI就能自动抓取GitHub issue、生成代码、调试UI,甚至帮你写博客发到Substack!这不是科幻,而是**Model Context Protocol (MCP)**的现实。MCP作为AI与工具交互的“通用语言”,自2024年…...
【最新 MCP 战神手册 09】利用资源和提示增强上下文
文章目录 1. 开始啦!2. 第一部分:通过资源解锁应用数据3. 第二部分:用提示引导 AI4. 第三部分:高效上下文管理策略1. 开始啦! 在上一章中,我们深入探讨了 MCP 工具——这些组件使得 AI 模型能够执行各种操作。然而,操作很少在真空中发生。为了让 AI 智能地行动,它需要…...
解决vue3 路由query传参刷新后数据丢失的问题
前言:在页面刷新的时候,路由query数据会被清空,网上很多方法说query传参可以实现,反正我是没有实现 思路:将数据保存到本地,通过 “ ?” 进行判断是否有数据,页面销毁的时候删除本地…...
VUE篇之树形特殊篇
根节点是level:1, level3及其子节点有关联,但是和level2和他下面的子节点没有关联 思路:采用守护风琴效果,遍历出level1和level2级节点,后面level3的节点,采用树形结构进行关联 <template><div :class"…...
Qwen多模态系列论文
From:https://www.big-yellow-j.top/posts/2025/04/28/QwenVL.html 本文主要介绍Qwen-vl系列模型包括:Qwen2-vl、Qwen2.5-vl Qwen2-vl http://arxiv.org/abs/2409.12191 模型结构: Qwen2-vl主要的改进点在于:1、使用动态分辨率(…...
Astro大屏中关于数据流转的数据接入与数据中心之间的逻辑关系梳理
在 Astro 大屏中,「数据接入」与「数据中心」是紧密关联的一对模块,分别承担“数据从哪来”和“数据怎么管”的职责。为了更形象地帮助初学者理解,我可以用“自来水系统”的比喻来解释整个原理与操作逻辑: 🏠 形象比喻…...
【今日三题】小红的ABC(找规律) / 不相邻取数(多状态dp) / 空调遥控(排序+二分/滑动窗口)
⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 小红的ABC(找规律)不相邻取数(多状态dp)空调遥控(排序二分/滑动窗口) 小红的ABC(找规律) 小红的ABC 找最短回文串ÿ…...
双重差分模型学习笔记(理论)
【DID最全总结】90分钟带你速通双重差分!_哔哩哔哩_bilibili 一、DID的基本原理 (一) 单重差分 1. Cross-Section Comparison 截面数据 只有某个时间点事件发生后的数据 D1 事件发生后 D0 事件发生前 2. Befor-After Vomparison 时间序列…...
企业级私有化部署,内部聊天软件
如何在激烈的市场竞争中脱颖而出,提升工作效率、降低运营成本,同时保障信息安全,成为众多企业管理者亟待解决的问题。而BeeWorks 企业级私有化部署的内部聊天软件,无疑是为这一难题提供了一把金钥匙。 BeeWorks覆盖即时通讯&#…...
HCIA-Datacom 高阶:VLAN、VLANIF 与静态路由综合实验
拓扑图解读 从拓扑图中可以看到,存在三层交换机 LSW3、普通交换机 LSW4、路由器 R2 以及 PC1 - PC4。LSW4 连接了三个不同 VLAN 的 PC(PC1 属于 VLAN 10、PC2 属于 VLAN 20、PC3 属于 VLAN 30 ),并通过 Ethernet 0/0/1 端口以 tr…...
Android ndk 编译opencv后部分接口std::__ndk1与项目std::__1不匹配
1、opencv-4.11预编译命令(在opencv4.5.0之后兼容免费features2d做特征匹配),NDK版本选用的android-ndk-r23c-linux.zip cmake -G Ninja \ -DCMAKE_TOOLCHAIN_FILE/home/who/Downloads/NDK/android-ndk-r23c/build/cmake/android.toolchain.…...
SQL命令一:SQL 基础操作与建表约束
目录 引言 一、SQL 基础命令 (一)数据库相关操作 (二)表格相关操作 (三)MySQL 常用数据类型 二、增删改查(CRUD)操作 (一)增加数据 (二&a…...
颜色分类,不靠“调色盘”:双指针 VS 计数排序的正面PK
颜色分类,不靠“调色盘”:双指针 VS 计数排序的正面PK 在算法圈混得久了,总有一些题目是面试官的心头好,刷题人绕不过的“鬼门关”。“颜色分类”(LeetCode 75)就是其中之一,看似小儿科…...
Shopify网上商店GraphQL Admin接口查询实战
目录 一、Shopify网上商店 二、个人商店配置接口权限 三、PostMan调用接口测试 四、通过Java服务调用接口 一、Shopify网上商店 Shopify是由Tobi Ltke创办的加拿大电子商务软件开发商,总部位于加拿大首都渥太华,已从一家在咖啡店办公的 5人团队&…...
Laravel基础
Laravel 基础 01.Laravel入门和安装 Composer安装Laravel步骤 要使用 Composer 安装 Laravel,请按照以下步骤操作: 确保已经安装了 Composer。如果还没有安装,请访问 https://getcomposer.org/download/ 下载并安装。 打开命令行或终端。…...
【Leetcode 每日一题 - 补卡】2302. 统计得分小于 K 的子数组数目
问题背景 一个数组的 分数 定义为数组之和 乘以 数组的长度。 比方说, [ 1 , 2 , 3 , 4 , 5 ] [1, 2, 3, 4, 5] [1,2,3,4,5] 的分数为 ( 1 2 3 4 5 ) 5 75 (1 2 3 4 5) \times 5 75 (12345)575。 给你一个正整数数组 n u m s nums nums 和一个整数 k…...
力扣——206.反转链表倒序输出链表
206. 反转链表 - 力扣(LeetCode) 思路(迭代) 设三个指针,前后两个指针都为空,当前指针为输入的头指针 开始循环——判断条件为当前节点不为空 先给下一个节点赋值为——当前节点的下一个 改变当前节点的…...
Arthas在Java程序监控和分析中的应用
Arthas在Java程序监控和分析中的应用 在互联网大厂Java求职者的面试中,经常会被问到关于使用Arthas来监控和分析Java程序的相关问题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官:马架构,欢迎来到我们公司的面…...
第13讲:图形尺寸与分辨率设置——适配论文版面,打造专业图稿!
目录 📌 为什么这一讲重要? 🎯 一、先认识几个关键词 ✍️ 二、ggsave() 是导出图的标准方法 📐 三、尺寸设置技巧:对齐目标期刊 🔍 找到目标期刊的图形栏宽 📦 四、多个图组合导出(与 patchwork 搭配) 🧪 五、使用 Cairo / ragg 导出高质量图 🎁 六…...
Docker与Vmware网络模式的对别
前言 在使用了很久的VMware和Docker后,分别独立配置过他们的网络,但是每次配置一方时,总感觉和另一方有点不一样,但是也没有来得及总结。刚好最近有时间可以总结一下。 重点: 1、VMware的桥接模式和Docker的桥接模式完…...
大模型在肾癌诊疗全流程中的应用研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、大模型预测肾癌术前情况 2.1 基于影像组学的肾癌良恶性及分级预测 2.1.1 MRI 影像组学模型预测肾透明细胞癌分级 2.1.2 CT 影像深度学习模型鉴别肾肿物良恶性及侵袭性 2.2 大模型对手术风…...
Springboot使用登录拦截器LoginInteceptor来做登录认证
创建拦截器LoginInteceptor类 interceptors/LoginInteceptor.java package org.example.interceptors;import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.example.utils.JwtUtil; import org.springframework.s…...
2025年- H13-Lc120-189.轮转数组(普通数组)---java版
1.题目描述 2.思路 import java.util.Arrays;public class H189 {public static void main(String[] args) {int[] newArr {1, 2, 3, 4, 5};int[] nums new int[5];System.arraycopy(newArr,0,nums,0,4);System.out.println(Arrays.toString(nums)); } }补充2: 3.…...
Android Framework常见问题
以下是不同难度级别的 Android Framework 面试题,包含答案要点,可帮助你为面试做好准备。 初级难度 1. 请简要解释 Android Framework 是什么。 答案要点:Android Framework 是 Android 系统的核心组成部分,它为开发者提供了一…...
【AI】图片处理的AI工具
博主最近需要给客户展示一下做的一些设备和仪器,随手拍了一些照片,觉的背景不是很好看,于是在网上寻找AI图片处理工具。后来随手用了一下豆包AI,发现很好用,这里把一点使用的心得体会记录一下,并和大家分享…...
Python列表全面解析:从基础到高阶操作
一、为什么需要列表? 在Python中,列表是可变有序序列,用于存储多个元素的容器。相较于单一变量存储独立值,列表能更高效地管理批量数据,其特点包括: 引用存储:列表元素存储的是对象的引用…...
C++调用C动态库编译时报undefined reference to “funcxxx“错误
问题描述:Linux平台上C调用C库进行make编译时报undefined reference to "funcxxx"错误,错误实例如下: /usr/bin/ld: CMakeFiles/dialog.dir/widgets/widget.cpp.o: in function Widget::loadVerificationModule(): /home/zhangxia…...
基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
C++ 中自主内存管理 new/delete 与 malloc/free 完全详解
C 中 new/delete 与 malloc/free 完全详解 一、new/delete 与 malloc/free 的区别 特性new/deletemalloc/free属于C语言C语言申请的内存区堆(Heap)堆(Heap)返回类型指向对象类型的指针(自动转换)void*&…...
Maven中的依赖管理
目录 什么是依赖范围 什么是依赖传递 依赖范围对依赖传递的影响 依赖冲突 什么是依赖冲突 依赖冲突的解决方案 版本锁定 短路径优先 编辑 声明优先 特殊优先(后来者居上) 可选依赖 排除依赖 可选依赖和排除依赖的区别 刷新依赖的8种方式…...
生态修复项目管理软件
在“双碳”目标与生态文明建设的双重驱动下,生态修复项目正成为全球环境治理的核心战场。然而,矿山复绿、湿地修复、水土保持等工程往往面临跨地域、多主体、长周期的管理难题——从数据分散到进度失控,从成本超支到风险频发,传统…...
深度剖析 RocketMQ 5.0 之架构解析:云原生架构如何支撑多元化场景?
拓展学习:🔍「RocketMQ 中文社区」 持续更新,提供 RocketMQ 领域专家模型的 AI 答疑 作者 | 隆基 简介: 了解 RocketMQ 5.0 的核心概念和架构概览;然后我们会从集群角度出发,从宏观视角学习 RocketMQ 的管…...
Spring中bean的生命周期(笔记)
bean的生命周期,按照最重要五步 第一步:实例化bean,调用无参构造方法(通过BeanDefinition利用反射实例化Bean对象(无参数构造方法) 并通过推断构造方法...并放入三级缓存中..) 第二步:给bean属性赋值(调用…...
transform-实现Encoder 编码器模块
Encoder 论文地址 https://arxiv.org/pdf/1706.03762 Encoder结构介绍 Transformer Encoder是Transformer模型的核心组件,负责对输入序列进行特征提取和语义编码。通过堆叠多层结构相同的编码层(Encoder Layer),每层包含自注意力机…...
LVGL -窗口操作
1 窗口背景介绍 在 LVGL 中,screen 是一个顶层对象,代表你设备上当前显示的整个画面。它相当于一个“全屏容器”,你可以在上面添加按钮、标签、图像、容器等各种界面控件。它的本质就是一个特殊的 lv_obj_t,但它没有父对象&#…...
ollama运行qwen3
环境 windows server GPU 32G 内存 40G 升级ollama 需要版本 0.6.6以上 ollama --version拉取模型 ollama pull qwen3:32b时间比较长,耐心等待 运行模型 ollama run qwen3:32b运行起来之后发现GPU是可以跑起来的,发个你好看看 默认是深度思考的,不…...
如何查看和验证AWS CloudFront的托管区域ID
在使用AWS Route 53设置DNS记录时,正确识别CloudFront分发的托管区域ID是至关重要的。本文将详细介绍几种查看和验证CloudFront托管区域ID的方法,特别关注中国区CloudFront的特殊情况。 为什么托管区域ID很重要? 托管区域ID是AWS服务中的一个关键标识符。在创建指向CloudF…...
yum 安装 ncurses-devel 报错 baseurl 的解决方法
解决 yum 安装 ncurses-devel 报错(baseurl 问题) 出现 yum install ncurses-devel 报错 Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 的原因,很可能是因为 CentOS 7 的 SCL 源在 2024 年 6 月 30 日停止维护了。以下是解…...
《Vue3学习手记7》
组件通信(续) $attrs 组件通信:$attrs 适用于祖传孙或孙传祖 (需要通过中间组件) 传递给后代的数据,但未被接收,都保存在attrs中 1.祖传孙 父组件: <template><div cl…...
算法备案类型解析:如何判断你的算法属于哪种类型?
根据《互联网信息服务算法推荐管理规定》政策,算法备案已经成为了强制性备案。但对于企业而言,如何准确判断自身算法所属的备案类型往往存在困惑,今天我们就来详细盘一盘算法备案的类型,教你如何判断自己的算法属于哪一类 一、算…...
Javascript 中作用域的理解?
一、作用域的类型 1. 全局作用域(公司大门外) 范围:整个 JavaScript 文件变量:像贴在公告栏上的信息,所有人可见例子:const companyName "阿里"; // 全局变量,任何地方都能访问 fu…...