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

LTO优化详解

嵌入式开发过程中的LTO优化是什么意思?能够用来解决什么问题?它都优化了哪些?仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题?

嗯,用户问关于嵌入式开发中的LTO优化,我需要详细解释这个概念。首先,我得回忆一下LTO的全称是链接时优化,对吧?那它到底是什么意思呢?应该是在链接阶段进行的优化,而传统的优化是在编译每个源文件的时候进行的。所以LTO允许编译器看到整个程序的代码,从而进行跨模块的优化。
接下来,用户问LTO能解决什么问题。可能需要提到代码体积的减少,执行效率的提升,还有内联函数跨模块的可能性。因为在传统编译中,每个文件独立编译,编译器看不到其他模块的代码,所以优化受限。而LTO可以在链接时分析所有代码,进行更全局的优化,比如去掉未使用的函数,合并重复代码之类的。
然后优化了哪些方面呢?比如函数内联跨模块,删除死代码,优化全局变量,指令调度和寄存器分配可能更高效。这些都需要具体举例说明,让用户更容易理解。
关于是否仅开启LTO就能优化SIZE的问题,这里要小心回答。应该承认LTO确实能有效减少代码体积,尤其是通过删除未引用的代码和更积极的内联。但也要提醒用户,可能需要结合其他优化选项,比如GCC的-Os或者Clang的-Oz,才能达到最佳效果。此外,代码结构本身的影响也不能忽视,比如是否有冗余代码或者未使用的函数。
用户可能是在嵌入式开发中遇到代码体积过大的问题,所以想了解LTO是否是一个有效的解决方案。他们可能已经尝试过其他优化方法,但效果不明显,或者听说LTO有帮助但不确定具体机制。需要解释清楚LTO的作用和限制,避免他们有过高的期望,或者忽略其他必要的优化步骤。
另外,用户可能关心开启LTO的潜在问题,比如编译时间增加,或者对调试的影响。虽然问题中没有直接提到,但回答时可以适当提及,比如编译时间变长,调试信息可能受影响,但主要问题还是围绕他们提到的几点。
需要确保回答准确,结构清晰,分点回答每个问题。同时使用技术术语时要适当解释,让不同水平的读者都能理解。例如,解释“跨模块内联”时,可以举例子说明函数在另一个文件中的调用如何被内联优化。
最后,确认回答是否覆盖了所有问题,没有遗漏。用户明确要求分别回答每个问题,所以结构上需要分点,每个问题对应一个部分。同时保持语言简洁,避免冗长。

1. 嵌入式开发中的 LTO 优化是什么?

LTO(Link-Time Optimization,链接时优化)是一种编译器优化技术,允许在链接阶段(而非传统的编译阶段)对代码进行全局优化。传统编译流程中,每个源文件(.c)被单独编译成目标文件(.o),优化仅限于单个文件内的代码;而 LTO 在链接时会将所有目标文件的中间表示(如 GCC 的 GIMPLE、LLVM 的 IR)合并,再进行跨模块的优化。

2. LTO 能解决什么问题?

LTO 主要用于解决以下问题:

  • 代码体积(Size)优化:删除未被引用的函数、变量或冗余代码。
  • 性能优化:跨模块内联函数、优化全局数据流、调整指令调度等。
  • 跨模块优化瓶颈:传统编译无法跨文件优化,LTO 打破模块边界,实现全局优化。
  • 减少冗余:合并重复代码(如模板实例化、常量数据)。

3. LTO 具体优化了哪些内容?

LTO 的典型优化包括:

  • 跨模块内联(Cross-Module Inlining):将其他模块中的函数内联到调用处,减少函数调用开销。
  • 死代码消除(Dead Code Elimination):删除未被调用的函数或未使用的全局变量。
  • 全局常量传播:优化跨文件的常量使用。
  • 循环和指令优化:基于全局信息重新调度指令或优化循环。
  • 符号合并:合并相同功能的重复代码或数据。

4. 仅开启 LTO 能否优化代码体积(Size)?

可以显著优化,但需结合其他手段

  • LTO 本身对 Size 的优化效果
    • 通过删除未使用的代码(如库函数、未调用的静态函数)和冗余数据,通常能减少 5%~20% 的代码体积(取决于项目结构)。
    • 跨模块内联可能略微增加代码体积(若过度内联),但通常利大于弊。
  • 需配合其他优化选项
    • 单独开启 LTO 可能不够,需结合编译器的 -Os(优化 Size)或 -Oz(更激进的 Size 优化)。
    • 需确保代码本身无冗余(如未使用的库链接)。
  • 实际效果依赖代码结构
    • 若代码模块化程度高、存在大量未使用的库函数,LTO 效果显著;反之,若代码本身紧凑,优化空间有限。

总结

LTO 是嵌入式开发中优化代码体积和性能的有效手段,尤其适合资源受限的场景。但需权衡编译时间(LTO 会增加链接时间)和潜在的调试复杂性(优化后代码可能与源码差异较大)。通常建议结合 -Os 和 LTO 以达到最佳 Size 优化效果。


如果我想优化bin文件的size,我需要打开lto吗?

好的,用户之前已经询问过LTO优化在嵌入式开发中的作用,现在他问是否需要开启LTO来优化bin文件的体积。我需要先回顾之前的对话,确保回答一致。用户可能是在实际项目中遇到了体积过大的问题,想知道LTO是否有效。
首先,我应该明确回答他的问题:是的,开启LTO通常有助于减小bin文件的体积。但需要结合其他优化选项,比如-Os,同时要注意可能的副作用,比如编译时间增加和调试难度。用户可能想知道具体的步骤和注意事项,所以需要详细说明如何开启LTO以及相关的最佳实践。
用户可能没有提到的深层需求是,如何在不影响性能的情况下最大化体积优化,或者如何平衡编译时间和体积优化。因此,我需要提到结合使用LTO和-Os,并讨论不同编译器的配置方法,比如GCC和Clang的不同参数。
另外,用户可能担心开启LTO后的潜在问题,比如代码行为变化或调试信息不准确,所以需要提醒他们测试和验证的重要性,尤其是在资源受限的嵌入式环境中。还可能需要考虑是否所有依赖库都支持LTO,避免链接错误。
最后,总结一下步骤,明确开启LTO的方法、配合的优化选项、注意事项以及验证效果的方式,这样用户能有一个清晰的行动指南。

是的,在大多数情况下,开启 LTO(Link-Time Optimization)可以有效优化二进制文件(bin 文件)的体积,尤其是对于嵌入式系统中资源受限的场景。但具体效果和实现方式需要结合以下关键点来理解:

1. LTO 对代码体积的优化原理

  • 跨模块死代码消除
    传统编译中,编译器只能优化单个源文件(.c)内部的未使用代码,而 LTO 在链接阶段可以看到所有模块的代码,从而删除整个项目中未被调用的函数、变量,甚至是第三方库中的冗余代码。
  • 符号合并与常量传播
    合并重复的代码片段(如多次实例化的模板或常量数据),并通过全局分析优化常量使用。
  • 内联与指令优化
    跨模块内联可能减少函数调用开销,但也可能略微增加代码体积(取决于内联策略)。

2. 如何开启 LTO 以优化 Size?

  • 编译器选项
    在编译和链接时均需启用 LTO,例如在 GCC 或 Clang 中:
    # GCC
    CFLAGS += -flto -Os
    LDFLAGS += -flto -Os# Clang/LLVM
    CFLAGS += -flto=thin -Oz
    LDFLAGS += -flto=thin -Oz
    
    • -Os(优化体积)或 -Oz(更激进的体积优化)需与 LTO 配合使用。
  • 工具链支持
    确保编译器、链接器均支持 LTO(现代工具链如 GCC 9+、Clang 12+ 已默认支持)。

3. LTO 的优化效果

  • 典型体积缩减
    根据代码结构和依赖库的不同,LTO 通常可减少 5%~20% 的 bin 文件体积。
    • 例如:某嵌入式项目原始 bin 大小为 100KB,开启 LTO + -Os 后可能降至 85KB。
  • 案例对比
    优化方式bin 体积说明
    无优化 (-O0)120KB未优化,体积最大
    -Os100KB单文件优化,效果有限
    -Os + LTO85KB跨模块优化,效果显著

4. 注意事项与潜在问题

  • 编译时间增加
    LTO 需要在链接时进行全局优化,可能导致链接时间显著延长(尤其是大型项目)。
  • 调试难度
    优化后的代码可能与源代码行号不对应,增加调试复杂度(需保留调试符号或禁用 LTO 调试)。
  • 兼容性问题
    某些旧版编译器或第三方库可能不兼容 LTO(需验证是否支持 -flto)。
  • 过度内联的风险
    内联过多可能反而增大体积,可通过 -finline-limit 或调整内联策略控制。

5. 最佳实践

  1. 组合优化选项
    • 始终将 LTO 与 -Os(优化体积)或 -Oz(激进体积优化)结合使用。
    • 避免与 -O3(性能优化)混用,可能因内联过多导致体积膨胀。
  2. 验证未使用代码
    使用 -ffunction-sections-fdata-sections,配合链接器选项 --gc-sections,进一步删除未使用的代码段。
    CFLAGS += -ffunction-sections -fdata-sections
    LDFLAGS += -Wl,--gc-sections
    
  3. 测试与对比
    • 对比开启/关闭 LTO 的 bin 文件体积(size 工具或 arm-none-eabi-size)。
    • 确保功能正确性(某些优化可能破坏代码逻辑)。

结论

如果目标是优化 bin 文件体积,开启 LTO 是必要且有效的,但需注意以下几点:

  • 必须与 -Os-Oz 配合使用,单独开启 LTO 效果有限。
  • 验证依赖库的 LTO 兼容性,避免链接错误。
  • 权衡编译时间和体积优化,尤其在迭代开发中。

通过合理配置,LTO 可以显著减少嵌入式系统的存储占用,是资源优化的重要手段。


你也提到了,避免与 -O3(性能优化)混用,可能因内联过多导致体积膨胀,那我想问,开LTO和O3有什么区别呢?他们两个应用场景是什么样的呢?

好的,我需要仔细思考用户的问题。用户之前已经询问了LTO优化以及如何通过LTO来减少二进制文件的体积,现在他们进一步询问关于LTO和-O3的区别以及它们的应用场景,特别是为什么避免混合使用两者。用户可能是在嵌入式开发中,关心如何平衡代码大小和性能优化,同时想了解不同编译器选项的适用情况。
首先,我需要回顾LTO和-O3的基本概念。LTO(链接时优化)允许在链接阶段进行跨模块的优化,而-O3是GCC等编译器的一个优化级别,侧重于性能优化,可能会增加代码体积。用户想知道两者的区别,以及何时使用它们。
接下来,要分析两者的优化目标和策略。LTO主要是在链接时进行全局优化,消除死代码,合并符号等,这对减少体积有帮助。-O3则是在编译时进行更激进的优化,如循环展开、向量化、内联等,这可能会增加代码大小,但提升运行速度。
然后,需要明确两者的应用场景。用户可能想知道在什么情况下应该优先考虑体积(使用LTO和-Os)或在什么情况下需要最大化性能(使用-O3)。同时,用户提到混合使用的问题,需要解释为什么-O3与LTO一起使用可能导致体积膨胀,尤其是内联过多的情况。
还要考虑用户的潜在疑问,比如是否在某些情况下可以同时使用LTO和-O3,或者是否有其他优化选项的组合可以同时兼顾体积和性能。此外,用户可能希望了解具体的例子或数据,说明不同组合的效果。
需要确保回答结构清晰,分点说明两者的区别、优化策略、应用场景,以及混合使用的后果。同时,提供实际应用中的建议,帮助用户根据项目需求选择合适的配置。
最后,检查是否有遗漏点,比如调试影响、编译时间、兼容性问题等,但根据用户当前的问题,可能不需要深入这些细节,除非直接相关。要确保语言通俗易懂,避免过于技术化,但保持准确性。

在嵌入式开发中,LTO(Link-Time Optimization)和 -O3 优化选项的核心区别在于优化目标和策略,它们的应用场景取决于项目需求是优先代码体积(Size)还是运行性能(Performance)。以下是两者的对比及使用场景分析:

1. LTO 和 -O3 的本质区别

特性LTO(链接时优化)-O3(编译时性能优化)
优化阶段链接阶段(跨模块全局优化)编译阶段(单文件内部优化)
核心目标减少代码体积(Size)和全局性能提升最大化运行性能(Performance)
主要策略删除未使用代码、跨模块内联、符号合并循环展开、向量化、激进内联、指令重排
对 Size 的影响显著减少体积(消除冗余代码)可能增大体积(如循环展开、过度内联)
对性能影响中等性能提升(依赖全局优化)最大性能提升(依赖硬件加速和指令级优化)
编译时间增加链接时间(需全局分析)增加编译时间(单文件复杂优化)

2. 为什么避免同时使用 LTO 和 -O3

-O3 的优化策略可能导致 代码体积膨胀,而 LTO 的目标是 缩减体积,二者组合可能互相冲突:

  • 内联冲突
    -O3 会激进内联函数(即使跨模块),而 LTO 也会尝试跨模块内联。二者叠加可能导致 过度内联,反而增大体积。
  • 循环展开问题
    -O3 的循环展开(Loop Unrolling)会显著增加代码量,LTO 无法消除这种主动膨胀的代码。
  • 优化目标矛盾
    -O3 优先性能,LTO 优先体积,混合使用可能导致优化方向不明确,最终效果可能“既不够快,也不够小”。

3. 应用场景与推荐配置

(1) 优先优化代码体积(Size)的场景
  • 典型场景
    资源受限的嵌入式设备(Flash/RAM 较小)、需降低存储成本、低功耗设备(代码体积小可减少内存访问能耗)。
  • 推荐配置
    CFLAGS += -Os -flto      # 优化体积 + 链接时优化
    LDFLAGS += -Os -flto
    
    • 附加选项
      使用 -ffunction-sections -fdata-sections--gc-sections 进一步删除未使用代码。
    • 效果
      Size 最小化,性能可能略优于 -O0,但弱于 -O3
(2) 优先优化性能(Performance)的场景
  • 典型场景
    实时性要求高的系统(如电机控制、高频信号处理)、计算密集型任务(图像处理、AI 推理)。
  • 推荐配置
    CFLAGS += -O3 -march=native   # 最大化性能,启用硬件指令集(如 ARM NEON)
    LDFLAGS += -O3
    
    • 附加选项
      使用 -funroll-loops(循环展开)或 -ftree-vectorize(自动向量化)。
    • 注意
      若代码体积膨胀导致 Flash 不足,需权衡性能与资源限制。
(3) 平衡 Size 和 Performance 的场景
  • 折中方案
    CFLAGS += -O2 -flto     # 中等性能优化 + 链接时优化
    LDFLAGS += -O2 -flto
    
    • 效果
      -O2 的性能优化比 -Os 更强,同时 LTO 抑制部分体积膨胀。

4. 实验对比(示例)

假设某嵌入式项目的代码特性如下:

  • 功能:传感器数据处理 + 通信协议栈
  • 硬件:ARM Cortex-M4,256KB Flash
优化配置bin 体积运行速度(相对值)适用场景
-O0(无优化)120KB1.0x(基准)调试阶段
-Os + LTO80KB1.8x资源受限设备
-O3150KB3.5x高性能计算
-O2 + LTO95KB2.5x平衡性能与体积

5. 何时可以尝试混合使用 LTO 和 -O3

满足以下条件时,可谨慎尝试组合使用:

  1. 硬件资源充足:Flash 空间足够容纳代码膨胀。
  2. 需极致性能:如高性能边缘计算设备。
  3. 针对性优化:通过 __attribute__((noinline))-finline-limit 限制内联,避免体积失控。

示例配置:

CFLAGS += -O3 -flto -finline-limit=50   # 限制内联深度
LDFLAGS += -O3 -flto

总结

  • LTO 的核心价值是减少体积,适合资源受限的嵌入式场景。
  • -O3 的核心价值是提升性能,适合计算密集型任务。
  • 二者混合使用需谨慎,仅在资源充足且需权衡性能与体积时尝试。
  • 实际项目中,优先通过 -Os + LTO-O2 + LTO 找到平衡点

相关文章:

LTO优化详解

嵌入式开发过程中的LTO优化是什么意思?能够用来解决什么问题?它都优化了哪些?仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题? 嗯,用户问关于嵌入式开发中的LTO优化,我需要详细解释这个概…...

嵌入式之条件编译

在C编程中,条件编译是一种在编译时根据特定条件选择性地包含或排除代码的技术。它通过预处理器指令来实现,允许程序员根据不同的编译环境、平台或配置来控制哪些代码被编译。条件编译在跨平台开发、调试、功能开关场景中非常有用。 1. 预处理器指令 条…...

清华大学第五弹:《DeepSeek与AI幻觉》

作者:清华大学新闻与传播学院新媒体研究中心、人工智能学院(新媒沈阳团队) 时间:2025年2月 完整版下载地址:夸克网盘分享 一、AI幻觉的定义与分类 定义 学术定义:模型生成与事实不符、逻辑断裂或脱离上下…...

理解构件的3种分类方法

对于Java程序员来说,理解“构件分类方法”是非常重要的,因为这直接关系到如何高效地管理和复用软件组件。以下是针对三种常见分类方法的具体解释: 构件的3种分类方法 1. 关键字分类法 (Keyword Classification Method) 关键字分类法是最直…...

分布式数据库解析

title: 分布式数据库解析 date: 2025/2/20 updated: 2025/2/20 author: cmdragon excerpt: 通过金融交易、社交平台、物联网等9大真实场景,结合Google Spanner跨洲事务、DynamoDB毫秒级扩展等38个生产级案例,揭示分布式数据库的核心原理与工程实践。内容涵盖CAP定理的动态…...

Zotero 快速参考文献导出(特定期刊引用)

目录 一、添加样式 每次投期刊时每种期刊的引用方式不一样,就很麻烦。发现zeotero添加期刊模板再导入很方便 一、添加样式 然后就能导出自己想要的期刊格式的引用了...

库的制作与原理(一)

1.库的概念 库是写好的,现成的可以复用的代码。本质上库是一种可执行的二进制形式,可以被操作系统载入内存执行。库有俩种:静态库 .a[Linux] .lib[windows] 动态库 .so[Linux] .dll[windows] 就是把.c文件变成.o文件,把…...

go 日志框架

内置log import ("log""os" )func main() {// 设置loglog.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)// 自定义日志前缀log.SetPrefix("[pprof]")log.Println("main ..")// 如果用format就用PrintF,而不是…...

JavaScript 最佳实践

我只选取了我还没完全贯彻的条目罗列如下. 1.函数命名 函数名由动词开头,如getName(); 2.布尔类型命名 若函数返回布尔值,则函数名以is/can等开头. 3.常量命名约定 常量名全大写并以下划线""连接. 4.变量类型透明化 定义变量时,应将其立即初使化为一个与其同类型…...

Rust配置笔记

1.Node.js下载配置 2.c环境配置 C我是用vs装的点击这个installer 点击修改 选择C环境就行,这个时候它就帮忙配置环境了 3.Rust下载配置 4.装napi-rs框架 npm install -g napi-rs/cliRust下载网站 下完之后直接打开 一开始下包会比较慢,多等等 下好之后跑项目前第一件事配置…...

大模型WebUI:Gradio全解12——LangChain原理及agents构建Gradio UI(1)

大模型WebUI:Gradio全解12——LangChain原理及agents构建Gradio UI(1) 前言本篇摘要12. LangChain原理及其agent构建Gradio UI12.1 LangChain介绍12.1.1 概念12.1.2 用途12.1.3 文档参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易WebU…...

具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)

整合各亚专科医学领域知识能力的AI代理的开发与研究 一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能(AI)已成为推动各行业变革的关键力量,医疗领域也不例外。近年来,AI 在医疗行业的应用取得了显著进展,从医学影像诊断到疾病预测,从药物研发到个性化医疗,AI 技…...

机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解

机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解 目录 引言 脑卒中的全球影响机器学习在医疗预测中的挑战类别不平衡问题的核心痛点数据预处理与特征选择 数据来源与清洗缺失值处理方法类别特征编码特征选择技术处理类别不平衡的四大方法 SMOTE(合成少数类过采样技术…...

数据表的存储过程和函数介绍

文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...

为AI聊天工具添加一个知识系统 之117 详细设计之58 思维导图及观察者效应 之2 概念全景图

(说明:本文和上一篇问题基本相同,但换了一个模型 deepseek-r1) Q1227、在提出项目“为使用AI聊天工具的聊天者加挂一个专属的知识系统”后,我们已经进行了了大量的讨论-持续了近三个月了。这些讨论整体淋漓尽致体现了…...

Error [ERR_REQUIRE_ESM]: require() of ES Module

报错信息: 【报错】Message.js 导入方式不对,用的是 ES Moudle 的语法,提示使用 import 引入文件 项目开发没有用到 js-message 依赖,是 node-ipc 依赖中用到的 js-message 依赖, node-ipc 中限制 js-message 版本&a…...

GStreamer源码安装1.24版本

从官网下载 1.24的源码包 https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/1.24?ref_typeheads#getting-started ,尝试过使用git clone 的方式,但速度贼慢,就选择了下载源码包的方式安装依赖 sudo apt install libssl-dev g me…...

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践(遥感图像场景分类)专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…...

从 x86 到 ARM64:CPU 架构的进化与未来

在计算机发展的历史长河中,x86、x64 和 ARM64 这三大主流 CPU 架构各自书写了辉煌的篇章。它们不仅代表了技术的进步,更承载着无数创新者的梦想与努力。 x86:从 16 位到 32 位的辉煌之路 诞生与崛起 1978 年,英特尔(…...

Java数据结构第十二期:走进二叉树的奇妙世界(一)

专栏:数据结构(Java版) 个人主页:手握风云 目录 一、树型结构 1.1. 树的定义 1.2. 树的基本概念 1.3. 树的表示形式 二、二叉树 2.1. 概念 2.2. 两种特殊的二叉树 2.3. 二叉树的性质 2.4. 二叉树的存储 三、二叉树的基本操作 一、树型结构 1.…...

基于ffmpeg+openGL ES实现的视频编辑工具-添加贴纸(八)

在当下丰富多元的音视频编辑应用领域,添加贴纸已然成为一项广受欢迎的功能,它能够为音视频作品注入独特的趣味与创意元素。本文将深入探究音视频添加贴纸背后所涉及的技术原理与实现路径。 一、技术原理概述 音视频从本质上来说,是由一系列连续的图像帧(针对视频部分)以…...

【AI时代】基于AnythingLLM+ Ollama + DeepSeek 搭建本地知识库

一、本地安装Ollama及DeepSeek 参考教程: https://blog.csdn.net/Bjxhub/article/details/145536134 二、下载并安装AnythingLLM AnythingLLM下载地址: https://anythingllm.com/ 傻瓜式安装即可 可以自定义安装路径。三、配置AnythingLLM并使用 3.…...

leetcode刷题记录(一百一十五)——64. 最小路径和

(一)问题描述 64. 最小路径和 - 力扣(LeetCode)64. 最小路径和 - 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下…...

UE5 编辑器辅助/加强 插件搜集

1. Actor Locker 地址:https://www.fab.com/listings/ec26ac5e-4720-467c-a3a6-b5103b6b74d0 使用说明:https://github.com/Gradess2019/ActorLocker 支持:5.0 – 5.5 简单的编辑器扩展。它允许你通过世界轮廓窗口/热键/上下文菜单在编辑器视…...

怎么在Github上readme文件里面怎么插入图片?

环境: Github 问题描述: 怎么在Github上readme文件里面怎么插入图片? https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解决方案: 1.相对路径引用 上传图片到仓库 将图片文件(如 .png/.jpg&#xff…...

什么是矩阵账号?如何高效运营tiktok矩阵账号

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌​‌‌​‌‌‌‍‌​‌​‌​​​‍‌​​‌​‌‌​‍‌​​​​‌‌​‍‌​‌​​‌‌‌‍‌​​‌‌​‌​‍‌​‌​​‌‌‌‍‌​‌‌‌​​‌‍‌‌​​‌‌‌​‍‌‌​​‌‌​​‍‌…...

SpringSecurity初始化的本质

一、对SpringSecurity初始化的几个疑问 通过前面第一次请求访问的分析我们明白了一个请求就来后的具体处理流程 对于一个请求到来后会通过FilterChainProxy来匹配一个对应的过滤器链来处理该请求。那么这里我们就有几个疑惑。 FilterChainProxy什么时候创建的?过滤器链和对应的…...

自注意力机制和CNN的区别

CNN:一种只能在固定感受野范围内进行关注的自注意力机制。​CNN是自注意力的简化版本。自注意力:具有可学习感受野的CNN。自注意力是CNN的复杂形态,是更灵活的CNN,经过某些设计就可以变为CNN。 越灵活、越大的模型,需要…...

Vue 不同大版本与 Node.js 版本匹配的详细参数

Vue 2.x 与 Node.js 版本匹配: Vue 2.x 细分版本建议 Node.js 版本理由支持状态2.0 - 2.610.x - 14.x这些 Node.js 版本在 Vue 2.x 早期开发和维护阶段广泛使用,能提供稳定运行环境,适配当时常用构建工具和依赖包Node.js 10.x 维护期已结束;…...

本地部署DeepSeek-R1模型教程

文章目录 第一步:安装运行框架 哈喽各位小伙伴们,最近deepseek非常的火,不过因为全球访问量剧增经常会导致deepseek的服务器繁忙,如果想要稳定使用就得靠本地部署了,不仅可以稳定使用还能保护数据隐私,今天…...