iOS 知识点 - 一篇文章带你串通「操作系统 内存模型 文件系统」

news/2025/12/9 20:22:25/文章来源:https://www.cnblogs.com/qisheng-blogs/p/19328295

本文重点讲解 iOS 操作系统,Linux/Windows 操作系统待到后续新开文章专门讲解。

总览

目标:一篇文章理清 iOS 三个紧密相关但层次不同的事物:

  • 操作系统(iOS / Darwin):
    • 谁在管理 “进程、线程、虚拟内存页、文件描述符、系统调用”
  • 文件系统(APFS):
    • 文件到底存在哪儿?谁在管理 “目录、权限、快照、加密”
  • 内存模型:
    • 进程看到的内存是什么结构?虚拟内存、堆/栈、对象布局、ARC/Swift 并发内存语义 是怎么回事儿?

先看一张分层图,后文会自下而上地讲解相关知识:

┌──────────────────────────────────────────────┐
│               1. App 代码层                   │
│──────────────────────────────────────────────│
│ - 自己的类、模块、业务逻辑等代码                  │
└──────────────────────────────────────────────┘∇ 调用 API
┌──────────────────────────────────────────────┐
│ 2. 系统高层框架 Cocoa(macOS)/Cocoa Touch(iOS等)│
│──────────────────────────────────────────────│
│ - UIKit / SwiftUI (UI 框架)                   |
│ - Foundation(字符串/集合/文件/RunLoop)        |
│ - 其他框架: AVFoundation、CoreDate 等          |
└──────────────────────────────────────────────┘∇ 依赖
┌──────────────────────────────────────────────┐
│            3. 语言运行时 + 基础库               |
│──────────────────────────────────────────────│
│ - Objc runtime: `libobjc`                    |
│ - Swift runtime: `libswiftCore`              | 
│ - CoreFoundation: CFString/CFArray/...       |
│ - libSystem: libc, libdispatch, libthread ...|
└──────────────────────────────────────────────┘∇ 基于
┌──────────────────────────────────────────────┐
│  4. 内核 Darwin / XNU (Mach + BSD + IOKit)    │
│──────────────────────────────────────────────│
│ - 进程/线程调度                                │
│ - 虚拟内存(VM: 页、地址空间、缺页中断)           │ 
│ - VFS + 文件系统(APFS)                       │ 
│ - 网络协议栈、驱动、中断、沙盒、安全策略           │
└──────────────────────────────────────────────┘∇ 运行在
┌──────────────────────────────────────────────┐
│                  5. 硬件层                    │
│──────────────────────────────────────────────│
│ - ARM CPU + Cache +  MMU                     │
│ - 内存条(DRAM)                               │
│ - 存储:NAND 闪存 / SSD 控制器                  │
└──────────────────────────────────────────────┘

接下来从下往上一层层讲清楚:

  • 硬件 & 存储 → 内核 & 文件系统 → 虚拟内存模型 → 运行时内存模型 → 并发和 I/O。

零、硬件和存储:NAND/SSD 是什么?

简单了解下硬件:

  • NAND 闪存(NAND Flash):底层介质

    • iPhone / iPad 里的 “存储空间” 本质就是最底层的 NAND Flash 芯片,特点:
      • 断电不丢数据;
      • 按 “物理页” 写入(如 4KB 一页),按 “擦除块” 擦出(一块有多页);
      • 写入擦除有寿命,不能无限写。
  • SSD(固态硬盘):多块 NAND + 控制器 + 固件 做出来的 “固态硬盘设备”。

    • 控制器用 FTL(Flash Translation Layer)NAND 的 “物理页/擦除块” 抽象成:
      • 逻辑块设备: 一串逻辑块/扇区(0,1,2... 通常每块 4KB)。
      • 控制器负责:
        • 逻辑块号 -> 物理 NAND 页;
        • 坏块管理、ECC校验;
        • 磨损均衡、缓存优化。
    • 对于操作系统来说:
      • 看见的是一个可 “按块号随机读写” 的磁盘;
      • APFS(Apple File System) 就是建立在这个逻辑块设备之上的。

一、Darwin/XNU: iOS 的操作系统内核

1. 操作系统 & 内核的角色

操作系统(OS): 管理硬件资源(CPU、内存、磁盘、网络)的软件平台,向应用程序 (App) 提供统一的编程接口 (API)。

内核(Kernel): 操作系统的 “核心”,运行在最高权限级别(内核态),负责:

  • 管理 进、线程
  • 管理 内存
  • 管理 文件系统/设备/网络/安全
  • 处理 中断、异常、系统调用 等。

2. iOS 的内核:XNU

iOS 的内核叫 XNU ("X is Not Unix"),它是一个混合内核,主要由三部分组成:

  • Mach(微内核)
    • 负责 线程&任务、调度、虚拟内存(VM)、进程间通信(IPC) 等;
  • BSD 子系统
    • 提供 POSIX 接口、VFS(虚拟文件系统)、进程/文件描述符/用户与权限 等;
  • IOKit
    • 一套面向对象的驱动框架(驱动 GPU、网卡、存储控制器、传感器等设备)

3. Darwin: OS 底座

Darwin:包含 XNU 内核 + 一部分用户态基础库/工具,是 iOS/macOS 的共同底座。

iOS 和 Linux 都是 “类 UNIX” 系统,它们都有 进程、线程、虚拟内存、VFS、POSIX,在 虚拟内存和文件系统的分层思想上 高度一致。

  • 差别在于:
    • 内核的实现:Linux 自有一套,Darwin 是 Mach + BSD
    • 用户态生态:Linux 是 GNU ,Darwin 是 libSystem/CoreFoundation 等。

二、虚拟内存模型: 进程看到的 “内存世界”

虚拟内存(VM):操作系统提供的一层抽象:

  • 让每个进程都认为自己拥有一个 完整、连续 的地址空间(例如 64-bits 就是 0~2⁶⁴-1);
  • 实际上,这些虚拟地址被内核通过 页表(Page Table) 映射到 物理内存页,或者 mmap(文件映射 等。

好处:

  • 进程隔离
    • 每个进程有自己的虚拟空间,不会互相踩内存。
  • 灵活内存管理
    • 按需 分配 页面,不常用的页面可以 回收,文件页可以 丢弃后重读

1. 进程的 “虚拟地址空间” 布局

低地址
┌───────────────────────────────┐
│         代码段(text)           │ // 程序机械码(可执行文件指令的一部分,只读)
├───────────────────────────────┤
│       已初始化数据(data)        │ // 有初始值的 全局/静态变量
├───────────────────────────────┤
│       未初始化数据(bss)         │ // 无初始值的 全局/静态变量(默认为 0)
├───────────────────────────────┤
│                               │
│           堆(heap)            │  // malloc/new/ARC 动态分配的对象、缓冲区
│         (向高地址增长)          │
│             ⬇                │ 
├───────────────────────────────┤
│         映射区(mmap)           │  // 动态库, 内存映射文件、共享内存
├───────────────────────────────┤
│             ⬆                │
│          栈(stack)            │  // 局部变量 (值类型、指针)、函数调用帧 (返回地址、保存寄存器)、部分函数参数
│         (向低地址增长)          │
│                               │
└───────────────────────────────┘
高地址

注意:

  • 代码段并不是从 0x00000000 开始的:
    • 低地址一般是未映射区域,访问会崩溃(例如:空 block 的调用)
    • 实际的起始地址是由 内核+链接器+ASLR(地址空间布局随机化)决定的,每次进程启动可能都不一样。

小扩展: 为什么 <NSGlobalBlock: 0x1024e80f8>、<NSThread: 0x60000172ad00> 直接打印变量,有的地址是9位、有的是12位?

其实在 64-bits 操作系统下,本质都是 64 位,只不过打印变量时,高位0被省略了。

  • 如果使用 %p 打印,就可以看到是 0x0000 0001 024e 80f80x0000 6000 0172 ad00
  • 再换算成二进制,就是 0x0000 0000 0000 ....64 位。

2. 页(Page)和页缓存(Page Cache)

  • 页(Page):
    • 虚拟内存和物理内存管理的最小单位,一般是 4KB。
  • 页缓存(Page Cache):
    • 内核用来 缓存文件内容 的物理页集合
    • 也是 虚拟内存(物理页)文件系统(文件块) 之间的桥梁。

当你读取文件时(read/mmap):

  • 内核会:
    • 根据 “文件+读取偏移” 算出应该访问文件的哪一块数据(也就是将 “从第 N 个字节开始” 换算成 “从第几个文件块的第几个字节开始”);
    • 把这一块数据所在的磁盘块读入某个物理内存页(这页就挂在 Page Cache 中);
    • 映射到进程的虚拟地址空间。
    (文件 F, 偏移 X)  ←→  页缓存中的某个物理页 P↑
    某进程虚拟地址 VA (通过页表映射到 P)
  • 简化理解:
    • 文件读:磁盘块 → 页缓存 → 进程缓冲区/映射
    • 文件写:进程缓冲区/映射 → 页缓存 → 延迟写回闪存(写时复制)

3. 栈(Stack)与堆(Heap)

纬度 栈(Stack) 堆(Heap)
管理方式 编译器+内核自动管理静态空间 开发者+ARC共同管理的动态空间
用途 函数调用帧、局部变量、部分参数 动态对象、容器、跨函数/线程长期存在的数据
空间分配 连续、先进后出 大部分不连续,会产生内存碎片
分配/释放效率 高(只需要移动栈指针)
系统底层分配,配有专门的寄存器存放栈地址,出/入栈都有相应指令
低(维护链表等)
库函数分配,无专门的寄存器
生长方式 向低地址生长 向高地址生长
常见问题 递归过深/大局部数组 -> 栈溢出 内存泄漏、碎片化、过高峰值

三、APFS: iOS 的文件系统是如何在闪存上 “写数据” 的?

1. 文件系统的职责

文件系统:是操作系统中负责 长期存储管理 的子系统,提供:

  • 命名空间:文件名、目录、路径(如 /var/mobile/...);
  • 层次结构:目录树、相对/绝对路径;
  • 元数据:大小、创建时间、修改时间、权限、所有者 等;
  • 空间管理:在持久存储(NAND/SSD)上分配和回收数据块。

2. iOS 文件系统的演进:HFS+ → APFS

历史简书:

1. 经典 Mac OS                : MFS → HFS+
2. Mac OS 8~9 & 早期 OS X     : HFS+
3. 早期 iOS / 早期 macOS       : HFS+ / HFSX (Mac OS 扩展)
4. iOS 10.3+ & macOS Sierra+  : APFS (Apple File System)

3. APFS (Apple File System) 核心特性

3.1 容器(Container)和卷(Volume)

物理闪存设备(NAND/SSD)
└─ 逻辑块设备 (Block Device)└─ APFS Container (一个或多个)├─ Volume: System   (系统只读卷)├─ Volume: Data     (用户数据卷,App 沙盒在这里)├─ Volume: Preboot  (引导相关)└─ Volume: VM / 其他内部卷 ...(虚拟内存/缓存等)
  • Container:占据一个逻辑块设备或分区;
  • 多个 共享同一个 容器 的总空间:
    • 不需要固定卷大小;
    • 谁用谁占,整体控制额度即可。

3.2 Copy-On-Write(写时复制,COW)

修改前:Metadata → Block A修改后:Metadata → Block B (新块)Block A 仍在,可能被其他快照引用
  • 当需要修改文件或元数据时:

    • 不在 旧物理快 上覆盖;
    • 而是在空闲区域写一份 新块,然后把指针从 旧块 改到 新块
  • 好处:

    • 利于快照、回滚;
    • 对闪存友好:少做 “擦一块再写”,多做 “写新块”。

3.3 快照(Snapshot)

t0: Snapshot S0 记录卷的所有元数据指向(A,B,C)
t1: 正常写入新块 D,E,F(旧块 A,B,C 不变)
  • 快照:某个时刻冻结整个卷的逻辑视图
  • 用途
    • iOS 系统更新:更新前打快照,若更新失败可回滚;
    • 备份/恢复(macOS 的时间机器)依赖大量快照。

3.4 克隆(Clone):块级别的 “写时复制” 复制

APFS 的文件克隆:对同一个文件内容的 数据块“引用计数 + 写时复制” 的轻量级复制。

  • 从 “文件系统” 的角度来看:
    • 得到了一个 “看起来” 独立的新文件。
  • 从 “磁盘” 的角度来看:
    • clone 文件/目录 时,APFS 不复制数据块,只 共享 同一组数据块;
    • 修改任意一个文件时,才会为 clone 的分配新块并写入(写时复制)。

2.5 加密与文件保护(File Protection)

  • APFS 内置了强加密,iOS 在此基础上实现了 文件级加密NSFileProtection):
    App 写文件 → 指定 NSFileProtection → APFS 用对应密钥加密数据块 → 写入闪存
    
    • 在锁屏/未解锁时,某些文件的密钥不会解封,访问文件就会失败;
    • 即使拿走闪存芯片,没密钥也无法轻易恢复内容。

四、App 视角:沙盒、路径与 APFS 的映射

1. 沙盒(Sandbox)

沙盒(Sandbox): 是 iOS 用来隔离 App 的一种机制:

  • 每个 App 在 “Data 卷” 下有一个自己的根目录;
  • App 默认 只能 访问自己的沙盒目录(和一些经过系统授权的 共享目录:相册、iCloud 容器等)。

所有路径都在 Data 卷

/var/mobile/Containers/Bundle/Application/<APP_UUID>/<App>.app   // BundleApp 沙盒根(位于 APFS Data 卷内部)
├─ Documents/             // 用户文件,可备份
├─ Library/
│    ├─ Caches/           // 缓存,可被系统删除,不备份
│    ├─ Preferences/      // UserDefaults 存在这里
│    └─ Application Support/     // 一般性数据,默认可备份
└─ tmp/                   // 临时文件,可能被随时清理

在代码上都是使用 API 来管理文件,不关心绝对路径。

Bundle.main.resourceURL             // .app 内资源
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)

五、运行时的内存模型:对象/ARC/自动释放池/COW

1. 对象的内存布局

这里以 swift class 做例举,objc class 请看 runtime 详解篇:https://juejin.cn/post/7571722835658391586

class Person {var age: Intvar name: String
}/// `Person` 实例在堆上的简化布局:
┌─────────────────────────────────────┐
│  指向类型信息的指针(类似isa/class指针)  │
├─────────────────────────────────────┤
│  引用计数字段 (Swift RC)            │
├─────────────────────────────────────┤
│  age: Int                      │
├─────────────────────────────────────┤
│  name: String (一个引用/值)     │
└─────────────────────────────────────┘
  • objc class 类似: isa + 一堆 ivar
  • swift class 有自己的 元数据引用计数 实现。

name 本身又是一个结构,可能指向另一个堆缓冲区(COW 字符串底层存储)。

2. ARC (Automatic Reference Counting)

ARC 是 编译器协助的引用计数机制

  • 编译器在需要的地方插入 retain/release 调用;

  • 开发者通过 strong/weak 等方式控制对象生命周期。

  • 规则:

    • 新建:RC = 1;
    • 新的强引用:RC += 1;
    • 强引用释放/置空:RC -= 1;
    • RC 变为 0 时,调用 deinit/dealloc 释放内存。

3. Property 属性修饰符

@property 相关知识点详解篇:https://juejin.cn/post/7571734313923297314

4. Autorelease Pool 自动释放池

autorelease 对象:

  • 这些对象不会立即减少 RC,而是先被放入当前线程的 Autorelease Pool;
  • 当 pool 被销毁时,再批量 release

主线程上,每一轮 RunLoop 都会自动包装在一个隐式的 Autorelease Pool 中:

RunLoop 一轮:
┌──────────────────────────────────────────────────┐
│ push AutoreleasePool                             │
│ 处理事件/Timer/Block/UI (期间产生 autorelease 对象)│
│ pop AutoreleasePool → release                    │
└──────────────────────────────────────────────────┘

子线程上,无自动生成的 @autoreleasepool,如果有大量临时对象,应手动加一下,避免长时间占用内存

RunLoop 相关知识点详解篇:https://juejin.cn/post/7576556950332309504


六、并发内存语义:数据竞争、GCD、actor、Sendable

多线程 相关知识点详解篇:https://juejin.cn/post/7581324171398201390


七、文件系统与内存模型的交汇:I/O 全路径可视化

一次文件读取: 从 Swift 到闪存。

let data = try Data(contentOf: url)

执行路径:

[ 调用 Data(contentOf:) ]↓[ Foundation/CF ] (封装 POSIX API)↓[ POSIX I/O ]   (open/read 或 mmap)↓[ VFS 层 ]     (解析路径 -> 找到 APFS 上的 vnode)↓[ APFS ]     (找到文件块 ->  Container 中的逻辑块号)↓[ 块设备驱动 ] (逻辑块号 -> NAND 控制器)↓[ NAND/SSD ]: 读出物理页数据↓[ 内核的页缓存 ]  (把数据缓存到物理内存页)↓  [ 进程虚拟内存 ]- read: 把页缓存中的数据 copy 到用户缓冲区- mmap: 进程虚拟地址映射到物理页

最终拿到的 data 本质就是:

  1. 进程的 “虚拟地址空间” 中的一块 堆内存
  2. 其内容来自 内核页缓存
  3. 页缓存又对应了 APFS 容器 中的 逻辑块底层 NAND 页

八、iOS【操作系统、内存模型、文件系统】的知识链路总结

最后再重新看一遍关系图吧:

硬件层:- ARM CPU, Cache, MMU- NAND/SSD (物理页/擦除块)内核层 (Darwin / XNU):- Mach VM: 虚拟内存、页、地址空间、缺页中断- BSD: VFS, POSIX I/O, 进程/线程/FD, 套接字- 文件系统: APFS (Container/Volume, COW, snapshot, clone, encryption)语言/运行时层:- ObjC runtime: isa, 消息发送, 引用计数, autoreleasepool- Swift runtime: 类型元数据, ARC, COW, actor- 并发工具: GCD, NSOperationQueue, Swift Concurrency (Task/actor/Sendable)框架层:- Foundation, UIKit/SwiftUI, AVFoundation, CoreData, ...应用层:- App 代码: 业务逻辑, ViewController, ViewModel, Service- 使用: FileManager/Data/URLSession/CoreData/SQLite- 设计: 缓存策略, 持久化策略, FileProtection, 多线程/actor 设计

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年12月天津金蝶软件代理商最新推荐:天津鹏越软件,金蝶云星空、金蝶云星晨、金蝶云星翰、助力企业高效落地ERP系统与全场景管理升级

随着数字经济加速渗透,企业对专业化、定制化管理软件的需求持续攀升,尤其是在生产流程优化、财务精益化管控、多组织协同等核心场景中,优质的数字化解决方案已成为企业提升竞争力的关键。2025 年,天津地区企业数字…

102302114_比山布努尔兰_作业4

作业1 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 作业代码点击查看代…

2025年12月济南艺考画室最新推荐:济南大道画室,济南艺考画室、济南画室哪家好、济南画室推荐、山东美术艺考培训、山东画室个性化教学新标杆

随着美术艺考竞争日益激烈、教学标准化要求提升及学生个性化发展需求增加,优质画室已从大城市集中逐步扩展至地方深耕,2025年艺考培训市场规模预计持续增长。但市场扩张也带来画室教学水平、师资力量、升学成果参差不…

记一次磁盘占满的问题

说明 之前搭建的lobehub/lobe-chat网页AI问答突然不能用了。 于是重启docker遇到: yangx@ak:~$ docker run 23576ea8e726 docker: Error response from daemon: mkdir /var/lib/docker/overlay2/70e1042a088ffe1a6d26…

Redis提供的原子性命令

目录Redis提供的原子性命令主要类别的原子性命令:1. 字符串(String)原子操作2. 列表(List)原子操作3. 集合(Set)原子操作4. 哈希(Hash)原子操作5. 有序集合(Sorted Set)原子操作6. 位图(Bitmap)原子操作7…

多业态连锁环境管理系统:AI + 机器人闭环,坪效提升 16%

门店环境本是沉默的,却在无声处酿成大祸:高峰无人知地面湿滑,夜间无人见灯闪,雨天无人管玻璃污——2025年,环境设施异常导致的综合损失平均占运营成本19%,保洁+维修双线超支,数据孤岛让决策如盲。全场景痛点全面…

2025年12月室内水上乐园厂家推荐:山东汇川,儿童水上乐园、大型水上乐园、主题水上乐园、室外水上乐园、恒温泳池、室 泳池、全场景适配新标杆

随着文旅产业升级、消费需求多元化及健康理念普及,水上游乐与泳池设备行业迎来快速发展期,2025 年市场规模预计持续扩大。但市场增长也带来厂商产品质量、场景适配性、服务专业性参差不齐的问题,企业及投资者在选购…

2025雅思培训班怎么选?这5家高性价比机构帮你高效提分

2025雅思培训班怎么选?这5家高性价比机构帮你高效提分一、雅思选课三大痛点解析:为什么你总在无效对比? 在雅思备考的漫漫征途中,选对培训班就如同找到了一把开启成功之门的钥匙。然而,面对市场上琳琅满目的雅思培…

实用指南:「腾讯云NoSQL」技术之向量数据库篇:自研分布式向量数据库,实现毫秒级时序一致备份的挑战和实践

实用指南:「腾讯云NoSQL」技术之向量数据库篇:自研分布式向量数据库,实现毫秒级时序一致备份的挑战和实践2025-12-09 20:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap:…

Semaphore、CountDownLatch、ReentrantLock使用场景简单说说

目录Semaphore、CountDownLatch、ReentrantLock使用场景简单说说1. Semaphore(信号量)2. CountDownLatch(倒计时门闩)3. ReentrantLock(可重入锁)对比总结简单记忆三个并发工具的简单示例1. Semaphore 示例 - 停…

LATTICE HW-USBN-2B 高速下载器凭什么是销冠

LATTICE HW-USBN-2B 高速下载器凭什么是销冠 1). 支持windows7,Windows10 操作系统,两个操作系统非常稳定不断线。2). 支持JTAG 模式,速度快,最高30Mb/s,调试serdes core,不会像hw-usbn-2a出现错误。如这种错误…

py-lambda-map-list随笔

py-lambda-map-list随笔 匿名函数lambda lambda 表达式用于创建 小型、匿名 的单行函数。 语法:lambda arguments: expression很方便的map()用于及其方便地映射 把相同的操作(如lambda表达式)映射到后者(如列表上)…

2025年12月水上乐园设备厂家最新推荐:昊至泉充气水上乐园设备、室内水上乐园设备、户外水上乐园设备、大型水上乐园设备、漂流河水上乐园设备、打造安全创新个性化水上娱乐新标准

随着全民休闲娱乐需求增长及文旅产业升级,水上乐园作为夏季热门旅游目的地,其设备安全性、创新性及个性化设计已成为投资运营者的核心考量。2025年,市场对水上乐园设备的要求已从基础功能转向安全高效、主题鲜明、适…

杂题选记

记录一些我觉得比较有意思的题目。难度差异可能会很大。 书信 给一个字符串 \(S\),对于 \(S\) 中的每一类字符,可以选择一个区间 \([l,r]\) 保留,保留的字母间相对顺序不变。 每一个位置有权值 \(w_i\)。 求将 \(S\…

2025年12月铝材厂家推荐榜:廊坊国美铝业,工业铝材、门窗铝材、3C铝材、通用铝材、多领域铝材定制与绿色生产标杆

随着 2025 年国内基建项目集中开工、新能源产业加速扩张及绿色建筑标准全面落地,铝材作为工业制造与建筑领域的核心基础材料,市场需求持续攀升。但当前市场上厂商技术水平、产品适配能力及环保合规性差异显著,企业在…

Qt 文本转语言(QTextToSpeech类)详解 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

AWS发布网络扫描指南:构建更安全云环境的守则

亚马逊云科技(AWS)正式发布针对客户工作负载的网络扫描行为指导原则。该指南旨在帮助合规扫描工具获取更准确数据,减少滥用报告,并提升整体互联网安全,涵盖了扫描行为的可观测性、可识别性、协作性与保密性四大核…

# 题解#洛谷P2880 Balanced Lineup #ST表#

P2880 [USACO07JAN] Balanced Lineup G - 洛谷 分析f[i][j]记录以i开头,长度为2^i的子段的最值f[i][j+1]=max( f[i][j] , f[i+2^(j-1)][j-1] )代码实现 #include<bits/stdc++.h> #define int long long #defin…

2025年12月包头保洁公司最新推荐:信达家政,包头保洁开荒、包头高空清洗保洁、包头保姆公司、包头保姆家政、包头保姆月嫂、包头保姆护工、服务品质新标准

随着城市生活节奏加快及家庭服务需求多元化发展,家政服务行业正朝着专业化、标准化、精细化的方向升级。2025年,市场对高品质、可信赖的家政服务需求持续增长,但服务机构水平参差不齐、服务标准不一、人员素质差异大…

机器视觉测量与建模

基于机器视觉的空间信息数据获取与处理技术在当今发展迅速、应用前景巨大,它与计算机视觉、计算机图像学、机器人视觉导航、测绘遥感、地理信息系统等学科方向密切相关。本课程将系统地讲解介绍基于机器视觉的三维空间…