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

swift4-汇编分析枚举内存布局

一、枚举的内存原理

1.1  常规case

enum TestEnum {
case test1, test2, test3 }
var t = TestEnum.test1
t = .test2
t = .test3枚举是常规的case的情况-是采取一个字节来存枚举变量通过拿到枚举的内存地址,看地址里面存的枚举值情况窥探枚举内存存储情况
var t = TestEnum.test1 //内存存的是0 0x00000001000106e0 00 00 00 00 00 00 00 00
print(Mems.ptr(ofVal: &t))
t = .test2 //内存存的是1 0x00000001000106e0 01 00 00 00 00 00 00 00
t = .test3 //2 内存存的是2 0x00000001000106e0 02 00 00 00 00 00 00 00print(MemoryLayout<TestEnum>.size) //1
print(MemoryLayout<TestEnum>.stride) //1
print(MemoryLayout<TestEnum>.alignment) //1

1.2 原始值case的情况

var t = TestEnum.test1 //0x00000001000106c8  00 00 00 00 00 00 00 00
print(Mems.ptr(ofVal: &t))
t = .test2 //0x00000001000106c8  01 00 00 00 00 00 00 00
t = .test3 // 0x00000001000106c8  02 00 00 00 00 00 00 00print(MemoryLayout<TestEnum>.size) //1
print(MemoryLayout<TestEnum>.stride) //1
print(MemoryLayout<TestEnum>.alignment) //1结论原始值不影响枚举成员值的存储情况,和前面常规case还是一样的,原始值不占用枚举变量的内存

1.3 关联值的情况

enum TestEnum {
case test1(Int, Int, Int)
case test2(Int, Int)
case test3(Int)
case test4(Bool)
case test5
}
var e = TestEnum.test1(1, 2, 3)
e = .test2(4, 5)
e = .test3(6)
e = .test4(true)
e = .test5现象enum TestEnum {case test1(Int, Int, Int)case test2(Int, Int)case test3(Int)case test4(Bool)case test5}// 1个字节存储成员值// N个字节存储关联值(N取占用内存最大的关联值),任何一个case的关联值都共用这N个字节// 共用体// 小端:高高低低// 01 00 00 00 00 00 00 00// 02 00 00 00 00 00 00 00// 03 00 00 00 00 00 00 00// 00 枚举成员值// 00 00 00 00 00 00 00var e = TestEnum.test1(1, 2, 3)print(Mems.ptr(ofVal: &e))// 04 00 00 00 00 00 00 00// 05 00 00 00 00 00 00 00// 00 00 00 00 00 00 00 00// 01 枚举成员值// 00 00 00 00 00 00 00e = .test2(4, 5)print(Mems.memStr(ofVal: &e))// 06 00 00 00 00 00 00 00// 00 00 00 00 00 00 00 00// 00 00 00 00 00 00 00 00// 02 枚举成员值// 00 00 00 00 00 00 00e = .test3(6)// 01 00 00 00 00 00 00 00// 00 00 00 00 00 00 00 00// 00 00 00 00 00 00 00 00// 03 枚举成员值// 00 00 00 00 00 00 00e = .test4(true)// 00 00 00 00 00 00 00 00// 00 00 00 00 00 00 00 00// 00 00 00 00 00 00 00 00// 04// 00 00 00 00 00 00 00e = .test5print(MemoryLayout<TestEnum>.size) //25print(MemoryLayout<TestEnum>.stride) //32print(MemoryLayout<TestEnum>.alignment) //8结论:// 1个字节存储成员值// N个字节存储关联值(N取占用内存最大的关联值),任何一个case的关联值都共用这N个字节

1.4  只有一个case的情况

enum TestEnum {case test1
}print(MemoryLayout<TestEnum>.size) //0
print(MemoryLayout<TestEnum>.stride) //1
print(MemoryLayout<TestEnum>.alignment) //1

1.5 一个case的关联值

enum TestEnum {
case test(Int)
}
var t = TestEnum.test(10)print(MemoryLayout<TestEnum>.size) //8
print(MemoryLayout<TestEnum>.stride) //8
print(MemoryLayout<TestEnum>.alignment) //8因为只有一个case 只需要花8个字节来存你的关联值就行

综上 存储成员值的情况前提是有多个case,如果只有一个case的情况就没必要再花一个字节的内存去存成员值

二、switch底层原理

大概原理 取出那个成员值,然后拿成员值和case里面的值进行比较,和case 里面的哪个值相同就跳转到相应的位置

三、汇编

3.1 程序的本质

3.2 寄存器与内存 的关系

 var a = 3

var b = a + 1  这句代码要经过如下操作

为什么不直接在内存中移动,cpu 他支持的指令他是有限制的

第一个限定 他是不支持数据内存挪内存的,如果你想把一个内存的数据挪动到宁一个内存,必须要经过寄存器,这是规定;

第二个 如果你想进行一些运算,必须将数据拉到cpu里面,运算完再送回去

3.3  编程语言的发展

3.4 汇编语言的种类

3.5  常见汇编指令

(这里面装的是内存地址)%rbp寄存器里面存的内存地址值- 0x18

movq   -0x18(%rbp), %rax

movq根据这个内存地址对应的存贮空间的数据取出来赋值%rax

leaq  -0x18(%rbp), %rax

leaq根据这个内存地址赋值%rax

获取地址和对应地址的内存数据

//
//  MemsTest.swift
//  TestSwift
//
//  Created by lxj on 2025/3/2.
//  Copyright © 2025 lxj
//import Foundationpublic enum MemAlign : Int {case one = 1, two = 2, four = 4, eight = 8
}private let _EMPTY_PTR = UnsafeRawPointer(bitPattern: 0x1)!/// 辅助查看内存的小工具类
public struct Mems<T> {private static func _memStr(_ ptr: UnsafeRawPointer,_ size: Int,_ aligment: Int) ->String {if ptr == _EMPTY_PTR { return "" }var rawPtr = ptrvar string = ""let fmt = "0x%0\(aligment << 1)lx"let count = size / aligmentfor i in 0..<count {if i > 0 {string.append(" ")rawPtr += aligment}let value: CVarArgswitch aligment {case MemAlign.eight.rawValue:value = rawPtr.load(as: UInt64.self)case MemAlign.four.rawValue:value = rawPtr.load(as: UInt32.self)case MemAlign.two.rawValue:value = rawPtr.load(as: UInt16.self)default:value = rawPtr.load(as: UInt8.self)}string.append(String(format: fmt, value))}return string}private static func _memBytes(_ ptr: UnsafeRawPointer,_ size: Int) -> [UInt8] {var arr: [UInt8] = []if ptr == _EMPTY_PTR { return arr }for i in 0..<size {arr.append((ptr + i).load(as: UInt8.self))}return arr}/// 获得变量的内存数据(字节数组格式)public static func memBytes(ofVal v: inout T) -> [UInt8] {return _memBytes(ptr(ofVal: &v), MemoryLayout.stride(ofValue: v))}/// 获得引用所指向的内存数据(字节数组格式)public static func memBytes(ofRef v: T) -> [UInt8] {let p = ptr(ofRef: v)return _memBytes(p, malloc_size(p))}/// 获得变量的内存数据(字符串格式)////// - Parameter alignment: 决定了多少个字节为一组public static func memStr(ofVal v: inout T, alignment: MemAlign? = nil) -> String {let p = ptr(ofVal: &v)return _memStr(p, MemoryLayout.stride(ofValue: v),alignment != nil ? alignment!.rawValue : MemoryLayout.alignment(ofValue: v))}/// 获得引用所指向的内存数据(字符串格式)////// - Parameter alignment: 决定了多少个字节为一组public static func memStr(ofRef v: T, alignment: MemAlign? = nil) -> String {let p = ptr(ofRef: v)return _memStr(p, malloc_size(p),alignment != nil ? alignment!.rawValue : MemoryLayout.alignment(ofValue: v))}/// 获得变量的内存地址public static func ptr(ofVal v: inout T) -> UnsafeRawPointer {return MemoryLayout.size(ofValue: v) == 0 ? _EMPTY_PTR : withUnsafePointer(to: &v) {UnsafeRawPointer($0)}}/// 获得引用所指向内存的地址public static func ptr(ofRef v: T) -> UnsafeRawPointer {if v is Array<Any>|| Swift.type(of: v) is AnyClass|| v is AnyClass {return UnsafeRawPointer(bitPattern: unsafeBitCast(v, to: UInt.self))!} else if v is String {var mstr = v as! Stringif mstr.memType() != .heap {return _EMPTY_PTR}return UnsafeRawPointer(bitPattern: unsafeBitCast(v, to: (UInt, UInt).self).1)!} else {return _EMPTY_PTR}}/// 获得变量所占用的内存大小public static func size(ofVal v: inout T) -> Int {return MemoryLayout.size(ofValue: v) > 0 ? MemoryLayout.stride(ofValue: v) : 0}/// 获得引用所指向内存的大小public static func size(ofRef v: T) -> Int {return malloc_size(ptr(ofRef: v))}
}public enum StringMemType : UInt8 {/// TEXT段(常量区)case text = 0xd0/// taggerPointercase tagPtr = 0xe0/// 堆空间case heap = 0xf0/// 未知case unknow = 0xff
}extension String {mutating public func memType() -> StringMemType {let ptr = Mems.ptr(ofVal: &self)return StringMemType(rawValue: (ptr + 15).load(as: UInt8.self) & 0xf0)?? StringMemType(rawValue: (ptr + 7).load(as: UInt8.self) & 0xf0)?? .unknow}
}

相关文章:

swift4-汇编分析枚举内存布局

一、枚举的内存原理 1.1 常规case enum TestEnum { case test1, test2, test3 } var t TestEnum.test1 t .test2 t .test3枚举是常规的case的情况-是采取一个字节来存枚举变量通过拿到枚举的内存地址&#xff0c;看地址里面存的枚举值情况窥探枚举内存存储情况 var t Te…...

Vue 3 整合 WangEditor 富文本编辑器:从基础到高级实践

本文将详细介绍如何在 Vue 3 项目中集成 WangEditor 富文本编辑器&#xff0c;实现图文混排、自定义扩展等高阶功能。 一、为什么选择 WangEditor&#xff1f; 作为国内流行的开源富文本编辑器&#xff0c;WangEditor 具有以下优势&#xff1a; 轻量高效&#xff1a;压缩后仅…...

Docker安装嵌入框架Text Embeddings Inference (TEI)

Docker安装Text Embeddings Inference (TEI) 1 简单介绍 文本嵌入推理&#xff08;TEI&#xff0c;Text Embeddings Inference &#xff09;是HuggingFace研发的一个用于部署和服务开源文本嵌入和序列分类模型的工具包。TEI兼容OpenAI的嵌入模型的规范。 # 官网地址 https:/…...

【HeadFirst系列之HeadFirst设计模式】第14天之与设计模式相处:真实世界中的设计模式

与设计模式相处&#xff1a;真实世界中的设计模式 设计模式是软件开发中的经典解决方案&#xff0c;它们帮助我们解决常见的设计问题&#xff0c;并提高代码的可维护性和可扩展性。在《Head First设计模式》一书中&#xff0c;作者通过生动的案例和通俗的语言&#xff0c;深入…...

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…...

【UCB CS 61B SP24】Lecture 22 23: Tree and Graph Traversals, DFS, BFS 学习笔记

本文讲解了二叉树的四种遍历方式&#xff0c;以及如何通过前/后序遍历与中序遍历重建出二叉树&#xff0c;接着介绍了新的非线性数据结构&#xff1a;图&#xff0c;详细讲解了图的存储方式与遍历方式&#xff0c;最后使用 Java 基于邻接表的存储方式实现了图与 DFS、BFS 两种遍…...

Redis100道高频面试题

一、Redis基础 Redis是什么&#xff1f;主要应用场景有哪些&#xff1f; Redis 是一个开源的、基于内存的数据结构存储系统&#xff0c;支持多种数据结构&#xff08;如字符串、哈希、列表、集合等&#xff09;&#xff0c;可以用作数据库、缓存和消息中间件。 主要应用场景&…...

Mac OS Homebrew更换国内镜像源(中科大;阿里;清华)

omebrew官方的源一般下载包之类的会很慢&#xff0c;所以通常我们都是用国内的镜像源来代替&#xff0c;这样会提高我们的效率。Homebrew主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。 代码语言&#xff1a;javascript 代码运行次数&#xf…...

excel vlookup的精确查询、模糊查询、反向查询、多列查询

目录 入门 精确查询 模糊查询 反向查询 (搭配 if 函数) 多列查询 (搭配 match 函数) 入门 精确查询 需求: 查找 学生编号是008 所在的班级 操作: 在I2单元格输入公式如下,VLOOKUP(H2,B1:E12,4,FALSE), 得出结果 看一下vlookup 公式每一个参数应该怎么写? 语法: vlookup…...

linux的文件系统及文件类型

目录 一、Linux支持的文件系统 二、linux的文件类型 2.1、普通文件 2.2、目录文件 2.3、链接文件 2.4、字符设备文件: 2.5、块设备文件 2.6、套接字文件 2.7、管道文件 三、linux的文件属性 3.1、关于权限部分 四、Linux的文件结构 五、用户主目录 5.1、工作目录…...

MySQL 安装配置(完整教程)

文章目录 一、MySQL 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL 5.1 初始化 MySQL5.2 启动 MySQL 服务 六、修改 MySQL 密码七、卸载 MySQL八、结语 一、MySQL 简介 MySQL 是一款广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&am…...

C# Unity 唐老狮 No.4 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...

给没有登录认证的web应用添加登录认证(openresty lua实现)

这阵子不是deepseek火么&#xff1f;我也折腾了下本地部署&#xff0c;ollama、vllm、llama.cpp都弄了下&#xff0c;webui也用了几个&#xff0c;发现nextjs-ollama-llm-ui小巧方便&#xff0c;挺适合个人使用的。如果放在网上供多人使用的话&#xff0c;得接入登录认证才好&a…...

R语言绘图:韦恩图

韦恩分析 韦恩分析&#xff08;Venn Analysis&#xff09;常用于可视化不同数据集之间的交集和并集。维恩图&#xff08;Venn diagram&#xff09;&#xff0c;也叫文氏图、温氏图、韦恩图、范氏图&#xff0c;用于显示元素集合重叠区域的关系型图表&#xff0c;通过图形与图形…...

STM32——串口通信 UART

一、基础配置 Universal Asynchronous Receiver Transmitter 异步&#xff0c;串行&#xff0c;全双工 TTL电平 &#xff1a;高电平1 低电平0 帧格式&#xff1a; 起始位1bit 数据位8bit 校验位1bit 终止位1bit NVIC Settings一栏使能接受中断。 之前有设置LCD&#xff0c;…...

【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型

【大模型基础_毛玉仁】1.3 基于Transformer 的语言模型 1.3 基于Transformer 的语言模型1.3.1 Transformer1&#xff09;注意力层&#xff08;AttentionLayer&#xff09;2&#xff09;全连接前馈层&#xff08;Fully-connected Feedforwad Layer&#xff09;3&#xff09;层正…...

靶场(二)---靶场心得小白分享

开始&#xff1a; 看一下本地IP 21有未授权访问的话&#xff0c;就从21先看起 PORT STATE SERVICE VERSION 20/tcp closed ftp-data 21/tcp open ftp vsftpd 2.0.8 or later | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Cant get dire…...

大学至今的反思与总结

现在是2025年的3月5日&#xff0c;我大三下学期。 自大学伊始&#xff0c;我便以考研作为自己的目标&#xff0c;有时还会做自己考研上岸头部985,211&#xff0c;offer如潮水般涌来的美梦。 但是我却忽略了一点&#xff0c;即便我早早下定了决心去考研&#xff0c;但并没有早…...

【大模型】Llama 3.2 大语言模型初探:模型权重下载

文章目录 一、简介二、权重下载2.1 方法一&#xff1a;Meta 官网申请下载2.2 方法二&#xff1a;使用 hugging face 下载 一、简介 Llama&#xff08;Large Language Model Meta AI&#xff09;是 Meta&#xff08;原 Facebook&#xff09;开发的一系列开源大型语言模型。它的目…...

unity学习63,第2个小游戏:用fungus做一个简单对话游戏

目录 1 目标用fungus做一个简单的剧情对话游戏 1.1 先创建一个新的3D项目 1.2 fungus是什么 1.2.1 怎么获得 1.2 在AssetStore里搜索fungus (插件类)--千万别买收费的错的&#xff01; 1.3 fungus的官网 1.3.1 官网给的3个下载链接&#xff0c;unity的果然已经失效了 …...

笔记:代码随想录算法训练营day36:LeetCode1049. 最后一块石头的重量 II、494. 目标和、474.一和零

学习资料&#xff1a;代码随想录 1049.最后一块石头的重量II 力扣题目链接 思路&#xff1a;如何讲该问题转化为背包问题&#xff1a;还是对半分去碰&#xff0c;对半分去碰碰剩下的就是最小的。然后背包容量就是一半儿&#xff0c;物品重量等于物品价值等于stones[i] 和上…...

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…...

Android实现漂亮的波纹动画

Android实现漂亮的波纹动画 本文章讲述如何使用二维画布canvas和camera、矩阵实现二、三维波纹动画效果&#xff08;波纹大小变化、画笔透明度变化、画笔粗细变化&#xff09; 一、UI界面 界面主要分为三部分 第一部分&#xff1a;输入框&#xff0c;根据输入x轴、Y轴、Z轴倾…...

qt实践教学(编写一个代码生成工具)持续更新至完成———

前言&#xff1a; 我的想法是搭建一个和STM32cubemux类似的图形化代码生成工具&#xff0c;可以把我平时用到的代码整合一下全部放入这个软件中&#xff0c;做一个我自己专门的代码生成工具&#xff0c;我初步的想法是在下拉选框中拉取需要配置的功能&#xff0c;然后就弹出对…...

【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分

文章目录 &#x1f967;栈的初步理解&#xff1a;&#x1f967;易错&#xff1a;如何判断栈满&#x1f967;栈满理解&#x1f967;栈的基本运算&#x1f4da;栈操作的伪代码逻辑&#xff08;顺序和链栈&#xff09;&#x1f4d5;顺序栈运算实现&#xff1a;顺序栈的表示&#x…...

vue3(笔记)4.0 vueRouter.导航守卫.ElementPuls知识点

---vueRouter 创建路由: 完整写法(懒加载): 默认写法与vue2一致: 导入 然后 写成component: LoginPage import { createRouter, createWebHistory } from vue-routerconst router createRouter({history: createWebHistory(import.meta.env.BASE_URL), routes: [{path:/lo…...

[数字图像处理]实验三:直方图增强

目录 一、实验目的 二、实验原理 三、实验内容&#xff08;附代码&#xff09; 四、实验结果及分析 五、实验小结 一、实验目的 1.了解图像增强的意义和目的 2.掌握各种图像增强的基本原理和方法 3.使用MATLAB实现图像增强 二、实验原理 图像增强方法从增强的作用域…...

图像分类项目1:基于卷积神经网络的动物图像分类

1、选题背景及动机 在现代社会中&#xff0c;图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用&#xff0c;例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类&#xff0c;可以帮助人们更好地了解动物种类、数量和分布情况&#xff0c;从…...

并发编程(线程池)面试题及原理

1. 执行原理/核心参数 1.1 核心参数 核心参数 corePoolSize 核心线程数目maximumPooISize 最大线程数目 &#xff08;核心线程&#xff0b;救急线程的最大数目&#xff09;keepAliveTime 生存时间- 救急线程的生存时间&#xff0c;生存时间内没有新任务&#xff0c;此线程资…...

初次使用 IDE 搭配 Lombok 注解的配置

前言 在 Java 开发的漫漫征程中&#xff0c;我们总会遇到各种提升效率的工具。Lombok 便是其中一款能让代码编写变得更加简洁高效的神奇库。它通过注解的方式&#xff0c;巧妙地在编译阶段为我们生成那些繁琐的样板代码&#xff0c;比如 getter、setter、构造函数等。然而&…...

云原生时代的技术桥梁

在数字化转型的大潮中&#xff0c;企业面临着数据孤岛、应用间集成复杂、高成本与低效率等问题。这些问题不仅阻碍了企业内部信息的流通和资源的共享&#xff0c;也影响了企业对外部市场变化的响应速度。当前&#xff0c;这一转型过程从IT角度来看&#xff0c;已然迈入云原生时…...

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测&#xff1a;https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列&#xff1a; 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …...

【GPU使用】如何在物理机和Docker中指定GPU进行推理和训练

我的机器上有4张H100卡&#xff0c;我现在只想用某一张卡跑程序&#xff0c;该如何设置。 代码里面设置 import os # 记住要写在impot torch前 os.environ[CUDA_VISIBLE_DEVICES] "0, 1"命令行设置 export CUDA_VISIBLE_DEVICES0,2 # Linux 环境 python test.py …...

汽车免拆诊断案例 | 2023款丰田雷凌汽油版车行驶中偶尔出现通信故障

故障现象  一辆2023款丰田雷凌汽油版车&#xff0c;搭载1.5 L发动机&#xff0c;累计行驶里程约为4700 km。车主反映&#xff0c;行驶中偶尔组合仪表上的发动机转速信号丢失&#xff0c;转向变重&#xff0c;且有“闯车”感&#xff0c;同时车辆故障警报蜂鸣器鸣响。 故障诊断…...

千里科技亮相吉利AI智能科技发布会,共启“AI+车”新纪元

今天&#xff0c;在三亚举行的吉利AI智能科技发布会上&#xff0c;千里科技董事长印奇发表了主题为《从“车AI”到“AI车”》的演讲。印奇重点分享了对于“AI车”未来趋势的判断&#xff0c;并重点介绍了在吉利AI科技生态体系下&#xff0c;围绕智驾、智舱等领域的创新合作。基…...

汽车零部件厂如何选择最适合的安灯系统解决方案

在现代制造业中&#xff0c;安灯系统作为一种重要的生产管理工具&#xff0c;能够有效提升生产线的异常处理效率&#xff0c;确保生产过程的顺畅进行。对于汽车零部件厂来说&#xff0c;选择一套适合自身生产需求的安灯系统解决方案尤为重要。 一、安灯系统的核心功能 安灯系统…...

spring boot + vue 搭建环境

参考文档&#xff1a;https://blog.csdn.net/weixin_44215249/article/details/117376417?fromshareblogdetail&sharetypeblogdetail&sharerId117376417&sharereferPC&sharesourceqxpapt&sharefromfrom_link. spring boot vue 搭建环境 一、浏览器二、jd…...

spaCy 入门:自然语言处理的高效工具

spaCy 入门&#xff1a;自然语言处理的高效工具 引言 spaCy 是一个功能强大的开源 Python 库&#xff0c;专注于工业级的自然语言处理&#xff08;NLP&#xff09;。它以其高效的性能、简洁的 API 和对多种语言的支持而闻名。无论是进行文本分析、信息提取还是构建智能聊天机…...

Stable Diffusion模型高清算法模型类详解

Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4&#xff0c;分块尺寸768px★★★★★☆皮肤纹理细腻&#xff0c;但高对比场景易出现…...

数据结构:八大排序(冒泡,堆,插入,选择,希尔,快排,归并,计数)详解

目录 一.冒泡排序 二.堆排序 三.插入排序 四.选择排序 五.希尔排序 六.快速排序 1.Lomuto版本&#xff08;前后指针法&#xff09; 2.Lomuto版本的非递归算法 3.hoare版本&#xff08;左右指针法&#xff09; 4.挖坑法找分界值&#xff1a; 七.归并排序 八.计数排序…...

QT-对象树

思维导图 写1个Widget窗口&#xff0c;窗口里面放1个按钮&#xff0c;按钮随便叫什么 创建2个Widget对象 Widget w1,w2 w1.show() w2不管 要求&#xff1a;点击 w1.btn ,w1隐藏&#xff0c;w2显示 点击 w2.btn ,w2隐藏&#xff0c;w1 显示 #include <QApplication> #inc…...

随机播放音乐 伪随机

import java.util.*;/*** https://cloud.tencent.com.cn/developer/news/1045747* 伪随机播放音乐*/ public class MusicPlayer {private List<String> allSongs; // 所有歌曲列表private List<String> playedSongs; // 已经播放过的歌曲列表private Map<String…...

spring boot打包插件的问题

在spring boot项目中声明了 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build> 执行mvn clean package&…...

海康摄像头接入流媒体服务器实现https域名代理播放

环境 操作系统&#xff1a;Ubuntu 22.04流媒体服务器&#xff1a;srs 官网安装教程srs开启GB28181协议 官网开启教程进行海康摄像头的配置 官网配置教程srs使用systemctl实现开机自启 官网配置教程 nginx配置说明 server {listen 80;server_name a.com;return 301 https://$…...

Stable Diffusion模型Pony系列模型深度解析

Stable Diffusion模型Pony系列模型深度解析 一、技术架构与核心特性 基于SDXL的深度优化 Pony系列模型以SDXL为基础框架&#xff0c;通过针对二次元/动漫风格的微调&#xff0c;强化了在该领域的生成能力&#xff0c;同时保留了对写实场景的兼容性‌。其训练数据特别侧重于人…...

性能巅峰对决:Rust vs C++ —— 速度、安全与权衡的艺术

??关注&#xff0c;带你探索Java的奥秘&#xff01;?? ??超萌技术攻略&#xff0c;轻松晋级编程高手&#xff01;?? ??技术宝库已备好&#xff0c;就等你来挖掘&#xff01;?? ??订阅&#xff0c;智趣学习不孤单&#xff01;?? ??即刻启航&#xff0c;编…...

【Kubernets】K8S内部nginx访问Service资源原理说明

文章目录 原理概述**一、核心概念****二、Nginx 访问 Service 的流程****1. Service 的作用****2. Endpoint 的作用****3. Nginx Pod 发起请求****(1) DNS 解析****(2) 流量到达 kube-proxy****(3) 后端 Pod 处理请求** **三、不同代理模式的工作原理****1. iptables 模式****2…...

Markdown HTML 图像语法

插入图片 Markdown ![图片描述](图片链接)一般来说&#xff0c;直接复制粘贴过来就行了&#xff0c;部分网页/应用可以拖拽&#xff0c;没人会真敲图片的链接吧…… 示例图片&#xff1a; ![Creeper?](https://i-blog.csdnimg.cn/direct/f5031c8c4f15421c9882d7eb23540b8…...

2503,D比C更易重构

我发现C程序很少超越其初始设计.问题是,很难重构C程序.如 struct S { int a; }; struct S s; s.a 3; struct S *p; p->a 3;即.用来直接访问,->用来间接访问.假设想把按值传递S改为按指针传递S.现在你必须更新每个使用,而不仅是声明. 这是它在D中的工作方式: struct …...

Scala 中 val 和对象内部状态的关系

在 Scala 中&#xff0c;val 用于声明不可变的变量&#xff0c;这意味着一旦 val 被赋值&#xff0c;它的引用&#xff08;即指向的内存地址&#xff09;就不能再改变。然而&#xff0c;这并不影响对象内部的状态&#xff08;即对象的属性&#xff09;是否可以改变。具体来说&a…...