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

C语言深入解析 printf的底层源码实现

深入解析 printf 的底层源码实现

printf 是 C 标准库中最常用的函数之一,用于格式化输出字符串。它的底层实现复杂且高效,包含多个模块化的函数和机制。本文结合 GNU C Library(glibc)的源码,详细分析 printf 的实现原理,帮助读者理解其内部工作机制。


1. 概述

printf 的核心实现围绕以下几个组件展开:

  1. __printf:作为 printf 的核心入口,负责接收参数并调用底层实现。
  2. __vfprintf_internal:核心的格式化和输出逻辑。
  3. 流操作(FILE 结构):管理输出目标(如 stdout)和线程安全。
  4. 辅助宏与函数:如 va_list 处理可变参数,_IO_flockfile 进行流加锁。

2. 源码分析
2.1 __printf 函数

__printfprintf 的实际实现,代码如下:来源:https://github.com/bminor/glibc/blob/master/stdio-common/printf.c

#include <libioP.h>
#include <stdarg.h>
#include <stdio.h>#undef printfint
__printf (const char *format, ...)
{va_list arg;int done;va_start (arg, format); // 初始化可变参数列表done = __vfprintf_internal (stdout, format, arg, 0); // 调用底层格式化输出函数va_end (arg); // 清理可变参数列表return done; // 返回输出字符的总数
}#undef _IO_printf
ldbl_strong_alias (__printf, printf);
ldbl_strong_alias (__printf, _IO_printf);

关键点

  1. 参数处理
    • 使用 va_list 处理可变参数。
    • va_start 初始化参数列表,va_end 确保资源清理。
  2. 调用核心实现
    • __vfprintf_internal 是真正执行格式化和输出的函数。
    • 参数中 stdout 指定输出目标为标准输出。
2.2 __vfprintf_internal 的实现

__vfprintf_internal 是底层的格式化输出核心函数。在 GNU glibc 中,它被定义为 vfprintf 的别名。以下是 vfprintf 的部分源码:来源:https://codebrowser.dev/glibc/glibc/stdio-common/vfprintf-internal.c.html#1520

int
vfprintf (FILE *s, const CHAR_T *format, va_list ap, unsigned int mode_flags)
{/* 检查流方向 */
#ifdef ORIENTORIENT;
#endif/* 检查参数有效性 */ARGCHECK (s, format);#ifdef ORIENTif (_IO_vtable_offset (s) == 0&& _IO_fwide (s, sizeof (CHAR_T) == 1 ? -1 : 1)!= (sizeof (CHAR_T) == 1 ? -1 : 1))return EOF; // 流方向不匹配
#endifif (!_IO_need_lock (s)){struct Xprintf (buffer_to_file) wrap;Xprintf (buffer_to_file_init) (&wrap, s);Xprintf_buffer (&wrap.base, format, ap, mode_flags); // 核心解析printf的参数return Xprintf (buffer_to_file_done) (&wrap);}int done;_IO_cleanup_region_start ((void (*) (void *)) &_IO_funlockfile, s);_IO_flockfile (s); // 加锁以确保线程安全struct Xprintf (buffer_to_file) wrap;Xprintf (buffer_to_file_init) (&wrap, s);Xprintf_buffer (&wrap.base, format, ap, mode_flags);done = Xprintf (buffer_to_file_done) (&wrap);_IO_funlockfile (s); // 解锁_IO_cleanup_region_end (0);return done;
}

核心流程

  1. 参数校验

    • 使用 ARGCHECK_IO_fwide 确保流方向正确,避免不匹配的写入。
  2. 线程安全

    • 调用 _IO_flockfile 对流加锁,确保多线程环境下不会发生数据竞争。
    • 解锁操作通过 _IO_funlockfile 实现。
  3. 核心格式化逻辑

    • 使用 Xprintf_buffer 对输入的 formatva_list 进行解析。
    • 将解析后的数据写入流。
  4. 流写入

    • 数据写入通过 Xprintf (buffer_to_file_done) 完成,确保所有缓冲区内容正确输出。

3. 流操作与线程安全

FILE 是 C 标准库中用于管理 I/O 流的结构。printf 的底层实现中,通过 FILE 结构控制输出目标(如 stdout、文件等)。为了保证多线程环境下的安全性,glibc 使用以下机制:

  • 加锁与解锁
    • _IO_flockfile_IO_funlockfile 对流进行加锁和解锁,避免并发冲突。
  • 缓冲区管理
    • Xprintf_buffer 负责将格式化数据存储到缓冲区,避免频繁的 I/O 操作,提升性能。

4. 格式化字符串的解析

vfprintf 的核心任务是解析格式化字符串 format,并根据对应的占位符从 va_list 中提取参数。例如:

  • 简单格式"%d" 表示整数,va_arg 提取 int 参数。
  • 复杂格式:如 "%10.2f" 表示带宽度和精度的浮点数。

解析逻辑包括:

  1. 遍历 format,识别 % 开头的占位符。
  2. 根据占位符的类型调用不同的处理函数。
  3. 将结果写入缓冲区或目标流。

5. 代码运行示例

以下是一个简单的示例:

#include <stdio.h>int main() {int a = 42;printf("The answer is %d\n", a);return 0;
}

执行流程

  1. 编译器将 printf 转换为 __printf 的调用。
  2. __printf 初始化 va_list 并调用 __vfprintf_internal
  3. __vfprintf_internal 解析格式字符串并从 va_list 中提取参数。
  4. 将解析结果写入 stdout

6. 总结

printf 的底层实现充分体现了 C 标准库的设计精髓:

  • 高效的可变参数处理:通过 va_list 提供灵活的参数传递机制。
  • 模块化设计:将参数解析、格式化、流写入等功能分离,易于扩展和维护。
  • 线程安全:通过流加锁机制,确保多线程环境下的正确性。

深入理解 printf 的源码,不仅能帮助我们掌握 C 语言的底层原理,还能为高效编程和库开发提供重要参考。

分析和模拟 vfprintf 的实现

这段代码是 printf 底层实现的核心部分,它负责格式化字符串,并将格式化后的结果输出到指定的 FILE 流(如 stdout)。通过宏定义和函数调用,代码实现了灵活的缓冲区管理和线程安全的操作。以下是对代码的详细解析以及基于宏的模拟实现。


1. 宏定义的展开

Link: https://codebrowser.dev/glibc/glibc/stdio-common/printf_buffer-char.h.html#19

Link: https://codebrowser.dev/glibc/glibc/include/printf_buffer.h.html#281
首先,让我们回顾宏定义的结构:

#define Xprintf(n) __printf_##n
#define Xprintf_buffer Xprintf(buffer) // 展开为 __printf_buffer
#define Xprintf_buffer_done Xprintf(buffer_done) // 展开为 __printf_buffer_done
#define Xprintf_buffer_flush Xprintf(buffer_flush) // 展开为 __printf_buffer_flush
// 其他类似宏省略

通过这些宏,代码可以动态生成函数或变量名,从而实现灵活的函数调用和代码复用。例如:

  • Xprintf(buffer) 展开为 __printf_buffer,表示与缓冲区操作相关的核心函数。
  • Xprintf(buffer_done) 展开为 __printf_buffer_done,表示缓冲区完成后的处理函数。

2. 代码解析
2.1 函数头
int vfprintf(FILE *s, const CHAR_T *format, va_list ap, unsigned int mode_flags)
  • FILE *s:输出目标流,例如 stdout
  • CHAR_T *format:格式化字符串,例如 "%d %s"
  • va_list ap:包含格式化参数的列表。
  • mode_flags:控制格式化输出行为的标志。

2.2 流方向和参数检查
#ifdef ORIENT
ORIENT;
#endifARGCHECK(s, format);
  • ORIENT:通常用于确定流的方向(宽字符或窄字符)。
  • ARGCHECK:验证输入参数的有效性,确保流和格式化字符串均不为空。

2.3 线程安全与缓冲区操作
无锁处理
if (!_IO_need_lock(s)) {struct Xprintf(buffer_to_file) wrap; // 定义缓冲区结构体Xprintf(buffer_to_file_init)(&wrap, s); // 初始化缓冲区Xprintf_buffer(&wrap.base, format, ap, mode_flags); // 核心格式化逻辑return Xprintf(buffer_to_file_done)(&wrap); // 完成缓冲区输出
}

解析

  1. 如果不需要加锁(单线程环境),直接操作缓冲区:
    • 定义 wrap 结构体(如 __printf_buffer_to_file),用于管理缓冲区。
    • 初始化缓冲区,通过 Xprintf(buffer_to_file_init)wrap 与流 s 关联。
    • 调用 Xprintf_buffer 解析格式化字符串并填充缓冲区。
    • 最后通过 Xprintf(buffer_to_file_done) 将缓冲区内容写入流并释放资源。

加锁处理
int done;
_IO_cleanup_region_start((void (*)(void *)) &_IO_funlockfile, s);
_IO_flockfile(s); // 加锁
struct Xprintf(buffer_to_file) wrap;
Xprintf(buffer_to_file_init)(&wrap, s);
Xprintf_buffer(&wrap.base, format, ap, mode_flags);
done = Xprintf(buffer_to_file_done)(&wrap);
_IO_funlockfile(s); // 解锁
_IO_cleanup_region_end(0);
return done;

解析

  1. 加锁保护:
    • 使用 _IO_flockfile 加锁,确保多线程环境下的流安全。
    • 注册清理函数 _IO_funlockfile,即使函数异常退出也能自动解锁。
  2. 执行与无锁处理相同的缓冲区初始化、格式化和输出逻辑。
  3. 解锁并返回写入字符总数。

3. 模拟实现

为了更好地理解这段代码,可以通过模拟实现部分功能,简化宏定义和核心逻辑:

缓冲区管理
#include <stdio.h>
#include <stdarg.h>
#include <string.h>#define Xprintf(n) __printf_##n
#define Xprintf_buffer Xprintf(buffer)typedef struct {char buffer[1024]; // 缓冲区FILE *stream;      // 输出目标
} __printf_buffer;void __printf_buffer_init(__printf_buffer *buf, FILE *stream) {buf->stream = stream;memset(buf->buffer, 0, sizeof(buf->buffer)); // 清空缓冲区
}void __printf_buffer_flush(__printf_buffer *buf) {fputs(buf->buffer, buf->stream); // 输出缓冲区内容到流memset(buf->buffer, 0, sizeof(buf->buffer)); // 清空缓冲区
}void __printf_buffer_append(__printf_buffer *buf, const char *str) {strncat(buf->buffer, str, sizeof(buf->buffer) - strlen(buf->buffer) - 1);if (strlen(buf->buffer) > 1000) { // 模拟缓冲区满时刷新__printf_buffer_flush(buf);}
}
核心格式化逻辑
int vfprintf_simulated(FILE *s, const char *format, va_list ap) {__printf_buffer buf;__printf_buffer_init(&buf, s); // 初始化缓冲区const char *p = format;char temp[100];while (*p) {if (*p == '%' && *(p + 1)) { // 检测格式化占位符p++;switch (*p) {case 'd': {int val = va_arg(ap, int);snprintf(temp, sizeof(temp), "%d", val);__printf_buffer_append(&buf, temp);break;}case 's': {char *str = va_arg(ap, char *);__printf_buffer_append(&buf, str);break;}default:__printf_buffer_append(&buf, "%");__printf_buffer_append(&buf, (char[]){*p, '\0'});break;}} else {__printf_buffer_append(&buf, (char[]){*p, '\0'});}p++;}__printf_buffer_flush(&buf); // 刷新缓冲区return 0; // 示例返回值
}
示例调用
int main() {vfprintf_simulated(stdout, "Hello, %s! Your score is %d.\n", (va_list){"World", 100});return 0;
}

输出

Hello, World! Your score is 100.

4. 总结

通过分析和模拟实现,我们可以看到 vfprintf 的核心逻辑:

  1. 缓冲区管理:通过结构体管理输出,减少 I/O 操作,提升效率。
  2. 线程安全:加锁保护流,避免多线程竞争。
  3. 格式化处理:解析格式化字符串,动态生成输出。

这些设计体现了 GNU C Library 的模块化和高效性,同时为理解复杂的底层函数提供了良好的案例。

另外可以参考笔者的另一篇博客:《C Programming Language》第二版书中printf的最小实现详细解析

后记

2025年1月27日于山东日照。

相关文章:

C语言深入解析 printf的底层源码实现

深入解析 printf 的底层源码实现 printf 是 C 标准库中最常用的函数之一&#xff0c;用于格式化输出字符串。它的底层实现复杂且高效&#xff0c;包含多个模块化的函数和机制。本文结合 GNU C Library&#xff08;glibc&#xff09;的源码&#xff0c;详细分析 printf 的实现原…...

IPhone14 Pro 设备详情

目录 产品宣传图内部图——后设备详细信息 产品宣传图 内部图——后 设备详细信息 信息收集于HubWeb.cn...

vim多文件操作如何同屏开多个文件

[rootxxx ~]# vimdiff aa.txt bb.txt cc.txt #带颜色比较的纵向排列打开的同屏多文件操作 示例&#xff1a; [rootxxx ~]# vimdiff -o aa.txt bb.txt cc.txt #带颜色比较的横向排列打开的同屏多文件操作 示例&#xff1a; [rootxxx ~]# vim -O aa.txt bb.txt c…...

18款炫酷烟花合集

系列专栏 《Python趣味编程》《C/C趣味编程》《HTML趣味编程》《Java趣味编程》 写在前面 Python、C/C、HTML、Java等4种语言实现18款炫酷烟花的代码。 Python Python烟花① 完整代码&#xff1a;Python动漫烟花&#xff08;完整代码&#xff09;-CSDN博客 ​ Python烟…...

服务器虚拟化技术详解与实战:架构、部署与优化

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在现代 IT 基础架构中&#xff0c;服务器虚拟化已成为提高资源利用率、降低运维成本、提升系统灵活性的重要手段。通过服务…...

01.双Android容器解决方案

目录 写在前面 一&#xff0c;容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups&#xff08;Control Groups&#xff09; 1.1.3 联合文件系统&#xff08;Union File System&#xff09; 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署&#xff08;CI/C…...

C++封装红黑树实现mymap和myset和模拟实现详解

文章目录 map和set的封装map和set的底层 map和set的模拟实现insertiterator实现的思路operatoroperator- - map和set的封装 介绍map和set的底层实现 map和set的底层 一份模版实例化出key的rb_tree和pair<k,v>的rb_tree rb_tree的Key和Value不是我们之前传统意义上的key/…...

嵌入式知识点总结 Linux驱动 (一)-指令-常用Linux指令 GCC指令 GDB调试指令 驱动开发指令

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.怎么查看当前进程&#xff1f;怎么执行退出&#xff1f;怎么查看当前路径&#xff1f; 2.ls命令执行有什么功能&#xff1f;可以带哪些参数&#xff1f; 3.创建目录用什么命令…...

数字化创新者如何利用开源2+1链动模式AI智能名片S2B2C商城小程序源码重塑市场地位

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;数字化创新者正通过整合前沿技术&#xff0c;重塑行业格局&#xff0c;引领市场变革。本文深入探讨了开源21链动模式、AI智能名片以及S2B2C商城小程序源码等技术在数字化创新中的应用&#xff0c;旨在揭示这些技术如何助力企业…...

以用户为中心,优化 B 端界面设计

在数字化转型的进程中&#xff0c;B 端产品已成为企业高效运营的关键支撑&#xff0c;而 B 端界面设计则是决定其成败的核心要素。以用户为中心优化 B 端界面&#xff0c;不仅能提升员工操作体验&#xff0c;还能为企业运营注入强大动力。 以用户为中心&#xff0c;意味着深入洞…...

微服务学习-服务调用组件 OpenFeign 实战

1. OpenFeign 接口方法编写规范 1.1. 在编写 OpenFeign 接口方法时&#xff0c;需要遵循以下规范 1.1.1.1. 接口中的方法必须使用 RequestMapping、GetMapping、PostMapping 等注解声明 HTTP 请求的类型。 1.1.1.2. 方法的参数可以使用 RequestParam、RequestHeader、PathVa…...

使用国内镜像加速器解决 Docker Hub 拉取镜像慢或被屏蔽的问题

一、问题背景 Docker Hub 是 Docker 默认的镜像仓库&#xff0c;但由于网络限制&#xff0c;国内用户直接拉取镜像可能面临以下问题&#xff1a; 下载速度极慢&#xff08;尤其是大镜像&#xff09;。连接超时或完全被屏蔽&#xff08;部分网络环境&#xff09;。依赖国外源的…...

反向代理模块。。

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…...

《十七》浏览器基础

浏览器&#xff1a;是安装在电脑里面的一个软件&#xff0c;能够将页面内容渲染出来呈现给用户查看&#xff0c;并让用户与网页进行交互。 常见的主流浏览器&#xff1a; 常见的主流浏览器有&#xff1a;Chrome、Safari、Firefox、Opera、Edge 等。 输入 URL&#xff0c;浏览…...

飞致云开源社区月度动态报告(2025年1月)

自2023年6月起&#xff0c;中国领先的开源软件公司飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营数据概览&…...

【PyQt5】数据库连接失败: Driver not loaded Driver not loaded

报错内容如下&#xff1a; 可以看到目前所支持的数据库驱动仅有[‘QSQLITE’, ‘QMARIADB’, ‘QODBC’, ‘QODBC3’, ‘QPSQL’, ‘QPSQL7’] 我在网上查找半天解决方法未果&#xff0c;其中有一篇看评论反馈是可以使用的&#xff0c;但是PyQt5的版本有点低&#xff0c;5.12…...

Linux之内存管理前世今生(一)

一个程序&#xff08;如王者荣耀&#xff09;平常是存储在硬盘上的&#xff0c;运行时才把这个程序载入内存&#xff0c;CPU才能执行。 问题&#xff1a; 这个程序载入内存的哪个位置呢&#xff1f;载入内核所在的空间吗&#xff1f;系统直接挂了。 一、虚拟内存 1.1 内存分…...

【cran Archive R包的安装方式】

cran Archive R包的安装方式 添加链接描述 1.包被cran移除 2.包要求的R语言版本与你电脑上的版本不相符 ad archive包的网址或者是下载到工作目录下&#xff0c;ad等于文件名 install,packages(ad repos NULL)...

Python中容器类型的数据(上)

若我们想将多个数据打包并且统一管理&#xff0c;应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列 (sequence) 是一种可迭代的、元素有序的容器类型的数据。 序列包括列表 (list)…...

2025美赛美国大学生数学建模竞赛A题完整思路分析论文(43页)(含模型、可运行代码和运行结果)

2025美国大学生数学建模竞赛A题完整思路分析论文 目录 摘要 一、问题重述 二、 问题分析 三、模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;仅供参考&#xff09; 4.1.4问题1样例代码运行结果&…...

OneDrive同步桌面 实现文件备份

Target 将笔记本桌面与OneDrive同步&#xff0c;当Desktop的文件发生变动时&#xff0c;自动更新到OneDrive。 取消旧的OneDrive账号与本机的关联 点击logo&#xff0c;弹出界面&#xff0c;点击设置。 随后打开OneDrive界面&#xff0c;点击“同步与备份”&#xff0c;“备…...

14.模型,纹理,着色器

模型、纹理和着色器是计算机图形学中的三个核心概念&#xff0c;用通俗易懂的方式来解释&#xff1a; 1. 模型&#xff1a;3D物体的骨架 通俗解释&#xff1a; 模型就像3D物体的骨架&#xff0c;定义了物体的形状和结构。 比如&#xff0c;一个房子的模型包括墙、屋顶、窗户等…...

用C++编写一个2048的小游戏

以下是一个简单的2048游戏的实现。这个实现使用了控制台输入和输出&#xff0c;适合在终端或命令行环境中运行。 2048游戏的实现 1.游戏逻辑 2048游戏的核心逻辑包括&#xff1a; • 初始化一个4x4的网格。 • 随机生成2或4。 • 处理玩家的移动操作&#xff08;上、下、左、…...

python -m pip和pip的主要区别

python -m pip和pip的主要区别在于它们与Python环境的关联方式和安装路径。‌ ‌与Python环境的关联方式‌&#xff1a; pip 是直接使用命令行工具来安装Python包&#xff0c;不指定特定的Python解释器。如果系统中存在多个Python版本&#xff0c;可能会导致安装的包被安装到…...

linux监控脚本+自动触发邮件发送

linux脚本 需求&#xff1a; CPU 负载&#xff1a;使用 uptime 命令&#xff0c;我们可以清楚地了解系统的 CPU 负载情况。这个命令会显示系统在过去 1 分钟、5 分钟和 15 分钟的平均负载。高负载可能意味着系统正在处理大量的任务&#xff0c;可能会导致性能下降或服务响应延迟…...

Mybaties缓存机制

Mybatis缓存机制 在 MyBatis 中&#xff0c;缓存机制是用来提高查询效率的一种方式。MyBatis 提供了两种内置的缓存机制&#xff1a;一级缓存和二级缓存。 1. 一级缓存&#xff08;Local Cache&#xff09; 一级缓存是基于 SqlSession 的。当你在同一个 SqlSession 中执行相…...

面试题-Java集合框架

前言 Java集合框架&#xff08;Java Collections Framework&#xff09;是Java平台提供的一套用于表示和操作集合的统一架构。它位于java.util包中&#xff0c;并且自Java 1.2&#xff08;也称为Java 2平台&#xff0c;标准版&#xff0c;即Java SE 2&#xff09;起成为Java平…...

半波整流和全波整流电路汇总及电路仿真

0 前言 0.1 引言 整流电路是将交流电(AC)转换为直流电(DC)的电路,广泛应用于电源设计、信号处理和电力电子等领域。整流电路的基本功能是将交流电的正半周或负半周转换为直流电,从而为电子设备提供稳定的直流电源。本文将详细介绍半波整流和全波整流电路的工作原理、电…...

04-机器学习-网页数据抓取

网络爬取&#xff08;Web Scraping&#xff09;深度指南 1. 网络爬取全流程设计 一个完整的网络爬取项目通常包含以下步骤&#xff1a; 目标分析&#xff1a; 明确需求&#xff1a;需要哪些数据&#xff08;如商品价格、评论、图片&#xff09;&#xff1f;网站结构分析&…...

豆包MarsCode:前缀和计算问题

问题描述 思路分析 问题理解 小S的任务是计算一个整数数组 nums 的前缀和。前缀和是指从数组开始到某个位置的所有元素的累加值&#xff0c;形成一个新数组。例如&#xff1a; 输入数组&#xff1a;nums [4, 5, 1, 6]前缀和数组&#xff1a;[4, 9, 10, 16] 4 49 4 510 …...

MySQL中InnoDB逻辑存储结构

在MySQL中&#xff0c;InnoDB是最常用的存储引擎之一&#xff0c;它具有高度的事务支持、行级锁、ACID特性以及自动崩溃恢复等特性。InnoDB的逻辑存储结构可以分为多个层次&#xff0c;下面是详细的解析。 1. 表空间 (Tablespace) InnoDB的物理存储结构以表空间为基础。表空间…...

如何提高新产品研发效率

优化研发流程、采用先进工具、提升团队协作、持续学习与改进&#xff0c;是提高新产品研发效率的关键。其中&#xff0c;优化研发流程尤为重要。通过简化流程&#xff0c;减少不必要的环节和复杂性&#xff0c;企业可以显著提升研发效率。例如&#xff0c;采用自动化测试工具和…...

可扩展架构:如何打造一个善变的柔性系统?

系统的构成:模块 + 关系 我们天天和系统打交道,但你有没想过系统到底是什么?在我看来,系统内部是有明确结构 的,它可以简化表达为: 系统 = 模块 + 关系 在这里,模块是系统的基本组成部分,它泛指子系统、应用、服务或功能模块。关系指模块 之间的依赖关系,简单…...

使用大语言模型在表格化网络安全数据中进行高效异常检测

论文链接 Efficient anomaly detection in tabular cybersecurity data using large language models 论文主要内容 这篇论文介绍了一种基于大型语言模型&#xff08;LLMs&#xff09;的创新方法&#xff0c;用于表格网络安全数据中的异常检测&#xff0c;称为“基于引导式提…...

BUUCTF 蜘蛛侠呀 1

BUUCTF:https://buuoj.cn/challenges 文章目录 题目描述&#xff1a;密文&#xff1a;解题思路&#xff1a;flag&#xff1a; 相关阅读 CTF Wiki Hello CTF NewStar CTF buuctf-蜘蛛侠呀 BUUCTF&#xff1a;蜘蛛侠呀 MISC&#xff08;时间隐写&#xff09;蜘蛛侠呀 题目描述&am…...

eVTOL的航空电子设备漫谈

电动垂直起降&#xff08;eVTOL&#xff09;&#xff0c;也统称为城市空中交通&#xff08;UAM&#xff09;&#xff0c;是民用航空平台发展的新方向之一。随着它们在市场上成为现实&#xff0c;它们将对所使用的航空电子设备有其自身的要求.. eVTOL概念 eVTOL领域的发展才刚…...

SpringCloudAlibaba 服务保护 Sentinel 项目集成实践

目录 一、简介1.1、服务保护的基本概念1.1.1、服务限流/熔断1.1.2、服务降级1.1.3、服务的雪崩效应1.1.4、服务的隔离的机制 1.2、Sentinel的主要特性1.3、Sentinel整体架构1.4、Sentinel 与 Hystrix 对比 二、Sentinel控制台部署3.1、版本选择和适配3.2、本文使用各组件版本3.…...

【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数设置

【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数设置 【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数设置 文章目录 【深度学习|DenseNet-121】Densely Connected Convolutional Networks内部结构和参数…...

【问题】Qt c++ 界面 lineEdit、comboBox、tableWidget.... SIGSEGV错误

蛋疼的错误集锦----今日分错误&#xff1a; 在主界面或者对话框的构造函数中&#xff0c;准备对一些对象赋值初始化值时&#xff0c;报了以上错误。&#xff01;&#xff01;&#xff01;&#xff01; 一脸懵逼的&#xff0c;各种确认&#xff0c;因为是最基础的赋值想不到错在…...

Hugging Face 推出最小体积多模态模型,浏览器运行成为现实!

1. SmolVLM 模型家族简介 1.1 什么是 SmolVLM-256M 和 SmolVLM-500M,它们为何如此重要? 在人工智能的多模态模型领域,如何在有限的计算资源下实现强大性能一直是一个重要的挑战。SmolVLM-256M 和 SmolVLM-500M 是最近推出的两款视觉语言模型,它们不仅突破了传统“大模型”…...

30289_SC65XX功能机MMI开发笔记(ums9117)

建立窗口步骤&#xff1a; 引入图片资源 放入图片 然后跑make pprj new job8 可能会有bug,宏定义 还会有开关灯报错&#xff0c;看命令行注释掉 接着把ture改成false 然后命令行new一遍&#xff0c;编译一遍没报错后 把编译器的win文件删掉&#xff0c; 再跑一遍虚拟机命令行…...

提供ZYNQ,MPSOC,RFSOC生成BOOT.BIN的小工具

如图&#xff1a; 这里提供了三种.bif&#xff0c;三种批处理.bat文件,一个bootgen.exe可执行文件和这个批处理文件运行是需要的动态库文件。 我们先看一下.bat文件&#xff0c;以BOOT_RFSOC为例&#xff1a; del temp\boot.bin bootgen -image output_rfsoc.bif -arch zynqmp…...

滤波电路汇总

0、前言 1. 引言 滤波电路是电子系统中不可或缺的组成部分,其主要功能是选择性地通过或衰减特定频率范围内的信号。在现代电子技术中,滤波电路广泛应用于信号处理、通信系统、音频设备、电源设计等多个领域。通过滤波,可以去除信号中的噪声和干扰,提高信号的质量和稳定性…...

springboot 动态配置定时任务

要在Spring Boot中动态配置定时任务&#xff0c;可以使用ScheduledTaskRegistrar类来实现。 首先&#xff0c;创建一个定时任务类&#xff0c;该类需要实现Runnable接口。例如&#xff1a; Component public class MyTask implements Runnable {Overridepublic void run() {/…...

Github 2025-01-25Rust开源项目日报Top10

根据Github Trendings的统计,今日(2025-01-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目1Vue项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型…...

【Linux网络编程】数据链路层

前言&#xff1a; 数据链路层非常简单&#xff0c;对于程序员来说&#xff0c;这里只需要大致了解即可&#xff0c;本篇文章不做重点说明。 数据链路层介绍 数据链路层是OSI位于物理层之上和网络层之下&#xff0c;这一层的报文叫做帧。它的主要任务是确保数据从一个节点可靠地…...

MongoDB 数据库备份和恢复全攻略

在当今数据驱动的时代&#xff0c;数据库的稳定运行和数据安全至关重要。MongoDB 作为一款流行的 NoSQL 数据库&#xff0c;以其灵活的文档模型和高扩展性备受青睐。然而&#xff0c;无论数据库多么强大&#xff0c;数据丢失的风险始终存在&#xff0c;因此掌握 MongoDB 的备份…...

一文了解性能优化的方法

背景 在应用上线后&#xff0c;用户感知较明显的&#xff0c;除了功能满足需求之外&#xff0c;再者就是程序的性能了。因此&#xff0c;在日常开发中&#xff0c;我们除了满足基本的功能之外&#xff0c;还应该考虑性能因素。关注并可以优化程序性能&#xff0c;也是体现开发能…...

百度APP iOS端磁盘优化实践(上)

01 概览 在APP的开发中&#xff0c;磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长&#xff0c;如何高效管理磁盘空间直接关系到用户体验和APP性能。本文将结合磁盘管理的实践经验&#xff0c;详细介绍iOS沙盒环境下的文件存储规范&#xff0c;探讨业务缓…...

人工智能丨基于机器学习的视觉 CV 处理技术

从自动驾驶汽车到面部识别系统&#xff0c;CV无处不在&#xff0c;赋予计算机“看”的能力。无论是图像处理、模式识别&#xff0c;还是视频分析&#xff0c;机器学习都是推动这些技术进步的核心动力。这篇文章将深入探讨基于机器学习的计算机视觉处理技术&#xff0c;包括它的…...