去 IOE 的最后一公里:IvorySQL 5.4 × RISC-V 实测

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

本文作者:付超,Oracle ACE 与 PostgreSQL ACE 双认证专家,PG 分会西安用户组核心成员。

本文看点

一句话结论:IvorySQL 5.4 在 openEuler riscv64 平台上可原生编译、稳定运行,软件层面无指令集兼容性缺陷,具备作为去 IOE 替代数据库的基础条件。

而性能这一项,需要多说两句:本次压测跑出的 663 ~ 750 TPS,是在 128 核的机器上只点亮了不到 3% 算力、参数完全默认的情况下拿到的基线值。它反映的是 RISC-V 的单核算力现状,而不是这台服务器的能力上限——换句话说,差距是 CPU 给的,不是数据库拖的。

本文基于真实硬件实测,沿着一条完整的链路往下走:

  • 为什么难:RISC-V 的内存模型和 x86 到底差在哪,为什么这件事对数据库是生死线
  • 能不能编:源码原生编译,产出 RISC-V 原生二进制,无闭源依赖、无需打补丁
  • 跑起来像不像:Oracle 兼容层预加载运行无架构异常,无段错误
  • 跑得快不快:riscv64 TPS 663~750,单核等效约 187 TPS/线程,瓶颈在 CPU 不在软件

00 为什么非要在 RISC-V 上测一遍数据库?

国产化替换走到今天,芯片和操作系统这两层的替代路径已经比较清晰了。真正难啃的是数据库这一层——它之所以难,不是因为代码量大,而是因为一个数据库要同时扛住三件事:

  1. 并发原语:自旋锁、Latch、原子计数器、无锁数据结构;
  2. MVCC 可见性:事务快照的正确性依赖于内存读写顺序;
  3. 崩溃恢复:WAL 落盘顺序一旦被乱序执行破坏,就是数据丢失。

你会发现,这三件事全都踩在同一个敏感点上——内存一致性模型。

而这恰恰是 RISC-V 和 x86 真正不一样的地方。所以,"能不能编译通过"从来不是重点,"编出来之后事务是不是还对"才是重点。

01 先讲清楚:RISC-V 上的数据库,难在哪?

在贴命令之前,先花一分钟说说这次实测的"题面"。理解了这几条,后面的测试数据才有意义。

内存模型:这台机器的"性格"和 x86 不同

x86 采用的是 TSO(Total Store Order)内存模型——它对程序员相当友好,Store-Load 之外的内存重排基本被硬件挡住了。RISC-V 默认采用的是 RVWMO(Weak Memory Ordering),允许更多种类的内存访问重排序,需要软件显式地用 fence、amo(原子内存操作)指令来划定边界。

这个差异对普通应用几乎无感,但对数据库是生死线。PostgreSQL 系的代码里散布着内存屏障、原子 CAS、自旋锁;如果这些原语在 RVWMO 下被错误翻译或错误实现,典型症状就是:偶发的事务可见性错乱、难以复现的死锁、以及在高并发下 TPS 突然"塌方"。

所以本次测试最有价值的一条结论不是"能跑",而是"跑得不别扭"——没有出现锁竞争异常,也没有出现内存屏障相关的性能塌陷。

指令集与 ABI

实测环境的硬件能力基线是 rv64gc(UCB RISC-V + RVC 压缩指令)+ lp64d(双精度浮点 ABI),编译器 gcc 12.3.1。这是一套主流且完备的 64 位 RISC-V 组合,浮点、压缩指令、原子操作都在。

有一点算是"幸运":RISC-V 和 x86 同为小端序。这省掉了数据库里大量与字节序相关的适配工作(想想看,如果换成大端,所有磁盘格式、WAL 记录、网络协议解析都要重新过一遍)。

工具链生态是否齐备

源码编译的第一道坎其实是依赖。实测中,构建 PostgreSQL 系数据库所需的关键依赖——gcc、libicu、bison、flex、perl、readline、zlib——在 openEuler 24.03 LTS 官方仓库里都有 riscv64 版本,直接从 dnf 拉取即可,不需要自己交叉编译任何依赖。

这条看似平淡,实际是"能不能自主构建"的分水岭。

02 环境:一台 128 核、8 NUMA 的国产服务器

先把测试机亮出来。这是一台典型的"大机器",配置远超常规验证需求,也正因为如此,后面性能章节的解读才有了关键参照。

[highgo@openeuler-riscv64 ~]$ lscpu
Architecture:          riscv64
  Byte Order:          Little Endian
CPU(s):                128
  On-line CPU(s) list: 0-127
NUMA:
  NUMA node(s):        8
  NUMA node0 CPU(s):   0-7,16-23
  NUMA node1 CPU(s):   8-15,24-31
  NUMA node2 CPU(s):   32-39,48-55
  NUMA node3 CPU(s):   40-47,56-63
  NUMA node4 CPU(s):   64-71,80-87
  NUMA node5 CPU(s):   72-79,88-95
  NUMA node6 CPU(s):   96-103,112-119
  NUMA node7 CPU(s):   104-111,120-127

[highgo@openeuler-riscv64 ~]$ uname -a
Linux openeuler-riscv64 6.6.127-0.0.0.0.riscv64 #1 SMP Wed Jul 15 02:08:54 CST 2026
riscv64 riscv64 riscv64 GNU/Linux

[highgo@openeuler-riscv64 ~]$ free -g
               total        used        free      shared  buff/cache   available
Mem:             250           2         247           0           1         247
Swap:              0           0           0

环境体检的几条关键读数:

项目实测值对本次验证的意义
系统openEuler 24.03 LTS,内核 6.6.127国产 OS + 国产指令集,完整替换栈
CPU 拓扑128 核 / 8 个 NUMA 节点,每节点 16 核内存访问有跨节点代价,数据库对此极其敏感
内存250 GB(基本全空闲)大内存机器,默认参数会严重"浪费"
Swap0压测期间不存在换页抖动,数据可比性高
存储NVMe 0.9 TB单盘根分区仅 4.6 GB,数据目录需另挂大容量分区

这里有一条容易被忽略但很关键的信息:这台机器没有启用 Swap。这意味着压测过程中不会出现内存换页带来的 TPS 抖动,663 ~ 750 这组数字是"干净"的——但它同时也意味着,一旦内存配置失当,程序没有任何缓冲余地。

03 编译与部署:三条命令,零补丁

去 IOE 替代的首要前提,不是数据库功能多强,而是它能不能脱离闭源二进制包,在国产硬件指令集上自主编译部署。如果连源码都编不过,后面所有验证都无从谈起。

实测结果很干脆:完整源码编译一次通过,没有打任何补丁,没有改动一行源码。

第一步:装依赖(openEuler 仓库直取,无需交叉编译)

sudo dnf install gcc icu libicu libicu-devel bison flex perl \
     readline readline-devel zlib zlib-devel -y

第二步:拉源码、切分支

git clone https://github.com/IvorySQL/IvorySQL.git
cd IvorySQL
git checkout -b IVORY_REL_5_STABLE origin/IVORY_REL_5_STABLE

第三步:编译安装(-j32 并行编译)

./configure --prefix=/usr/local/ivorysql/ivorysql-5
make -j32
make install

第四步:初始化并启动

bin/initdb -D /opt/postgresql-19.3/ivorysql-5.x/data/

# 输出节选
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
Data page checksums are enabled.                    # 数据页校验和默认开启
selecting default "shared_buffers" ... 128MB        # ← 记住这个值,第 05 节要用
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
Success.

bin/pg_ctl -D /opt/postgresql-19.3/ivorysql-5.x/data/ -l logfile start
waiting for server to start.... done
server started

整个过程没有任何架构相关的报错。产出的是 RISC-V 原生二进制(UCB RISC-V, RVC, double-float ABI, lp64d),不带任何闭源依赖。

部署验收项全部通过:

  • ✅ initdb 数据库初始化正常
  • ✅ pg_ctl 启停实例正常
  • ✅ 可开启数据页校验和(checksums)
  • ✅ 可配置 UTF-8 字符集
  • ✅ 可接入 IvorySQL Oracle 兼容扩展库
  • ✅ OS 用户与数据库超级用户映射正常
  • ✅ TCP 网络连接、共享内存、NVMe 存储读写无架构异常

关键结论:不存在指令集层面的底层兼容障碍。IvorySQL 5.4 可以完全基于国产 RISC-V 硬件自主构建,不依赖闭源厂商预编译包,满足去 IOE 的基础部署诉求。

04 Oracle 兼容层:去 IOE 迁移方案的地基

Oracle 语法兼容是 IvorySQL 的核心价值,也是很多传统 Oracle 迁移去 IOE 选型时最关注的模块。如果兼容层在新架构上崩溃,那整个迁移方案就不成立。

这里有个容易被低估的技术细节:Oracle 兼容层不是一段独立的翻译脚本,而是通过扩展预加载的方式,深度挂进数据库内核的解析器、执行器和共享内存区。这意味着:

  • 它和内核共用同一套内存屏障与原子原语——第 01 节提到的弱内存模型风险,在兼容层这里同样存在,甚至更集中;
  • 它要在 shared_preload_libraries 阶段完成初始化,任何地址对齐、结构体布局或原子操作的架构差异,都会在实例启动时直接暴露成崩溃。

所以,兼容层能不能在新架构上干净加载并稳定运行,实际上是对数据库整体架构适配质量的一次"高压检验"。

测试中将以下三个扩展预加载到 shared_preload_libraries:

  • gb18030_2022:国标编码扩展
  • liboracle_parser:Oracle 语法解析器
  • ivorysql_ora:Oracle 兼容核心模块

riscv64 平台验证结果:

  • 扩展库可以正常加载,实例启动无异常
  • SQL 执行过程中无段错误(segfault)、无崩溃
  • 整套 SQL 业务用例运行期间,Oracle 解析兼容模块未出现架构相关异常

一句话:兼容层的地基是稳的。 对 Oracle 迁移选型来说,这是最有分量的一条结论——它意味着后续在 RISC-V 上做业务 SQL 全量回放,是可以期待的。

注意点:contrib 组件需手动补齐

IvorySQL 源码编译默认没有完整编译 contrib 组件,btree_gin、intarray、amcheck 等社区扩展未安装。执行 make -C contrib install 编译安装后,可解锁更多扩展能力,进一步对齐生产环境能力集。

05 性能:先看清楚,这个差距是谁给的

兼容性验证通过后,性能是绕不开的话题。这一节我们把数字拆开看。

5.1 原始数据

基于 pgbench 压测,8 客户端 / 4 线程 / 30 秒:

平台TPS说明
riscv64(本次实测)663 ~ 750shared_buffers 默认 128MB,未做调优
x86(同内核基线)约 1600同等压测参数

单看这两行,容易得出"RISC-V 只有 x86 一半"的结论。但把测试条件摊开,这个结论就不成立了。

5.2 把这组数字的"边界"标出来

观察维度实测值解读
并发线程4 个 OS 线程机器有 128 核,本次只动用了约 3% 的算力
单线程等效 TPS≈ 187(750 ÷ 4)x86 同口径约 400,比值 ≈ 0.47
shared_buffers128 MB占 256 GB 内存的 0.05%,几乎完全默认
NUMA8 节点,未做绑定存在跨节点内存访问开销
Swap0无换页抖动,数据可比性高
存储NVMe磁盘不是瓶颈

换句话说:663 ~ 750 TPS 不是"这台服务器的性能",而是"这台服务器上 4 个 RISC-V 核 + 全默认参数下 pgbench 的性能"。它是一条基线,不是上限。

5.3 差距拆到"单核"上,性质就清楚了

把 TPS 摊到线程:riscv64 ≈ 187 TPS/线程,x86 ≈ 400 TPS/线程,比值约 0.47。

这个比值,与 RISC-V 处理器和主流 x86 服务器处理器在单核 IPC × 主频上的现实差距是同一量级。也就是说——

软件层没有"额外加价"。

这一点值得反复强调。如果 IvorySQL 在 RISC-V 上存在架构相关的性能缺陷——锁自旋异常、内存屏障失效、cache line 对齐问题、原子指令劣化——那么单核效率会比硬件差距更差,而且通常伴随 TPS 剧烈波动。

而实测的 663 ~ 750 区间平稳:没有性能塌方,没有锁竞争异常,没有内存屏障相关的退化。

这就是本节的核心结论:性能差距来自 RISC-V 单核算力,不来自数据库软件。 对于以"兼容可用"为目标的验证来说,这是比 TPS 绝对值更重要的结果。

5.4 更值得期待的是:这台机器还没被真正用起来

4 个线程 / 128 核,意味着这台服务器的绝大部分算力在本次压测中处于闲置状态。真正的性能故事,要等下面这几个维度逐一验证之后才完整:

  1. 并发扩展性(最关键)——把客户端/线程提到 64/64 甚至 128/128,观察 TPS 是否随核数近似线性增长。这是衡量一台 RISC-V 服务器能否扛住生产数据库的核心指标,也是目前最值得补的一组数据。
  2. 内存维度——shared_buffers 从 128MB 调整到内存 25% 量级(约 64GB)。当前配置下缓存严重不足,这部分提升空间最大。
  3. NUMA 维度——8 个 NUMA 节点,需通过 numactl 做内存绑定与进程亲和,避免跨节点访问惩罚。数据库对 NUMA 的敏感度远高于一般应用。
  4. 页表维度——配置 HugePages 大页,减少 TLB miss。
  5. WAL 与检查点——调整 wal_buffers、max_wal_size、checkpoint_* 参数,优化写入路径。
  6. 存储维度——注意当前根分区仅 4.6 GB(已用 74%),生产部署必须为数据目录规划独立的大容量 NVMe 分区。

5.5 这条基线的价值

663 ~ 750 TPS 这个数字本身不算亮眼,但它有一个不可替代的价值:它是可比对的。

同参数、同内核、跨架构,唯一的变量是 CPU。有了这条基线,后续每一次调优、每一次版本迭代,都能清楚地知道改进来自软件还是来自硬件——这比一个孤立的、经过精心调优的漂亮数字有用得多。

06 兼容性总结与落地建议

兼容性总览

评估项兼容结论备注
riscv64 源码编译部署✅ 完全兼容原生二进制,无闭源依赖,零补丁
Oracle 兼容扩展模块✅ 可用预加载运行无架构问题,无段错误
标准 SQL、事务、并发✅ 完全兼容上游内核核心特性全部生效
性能(压测基线)✅ 无软件层损耗差距源于单核算力,非架构缺陷
contrib 社区扩展⚠️ 需手动编译安装默认未构建,补齐即可

总体判断I:IvorySQL 5.4 在 RISC-V 国产硬件上软件层面兼容可用,没有发现指令集相关功能性缺陷,具备作为去 IOE 替代数据库的基础条件。

落地实践建议

1. 编译阶段:完整编译 contrib 模块

部署时执行 make -C contrib install,补齐 btree_gin、intarray、amcheck 等社区扩展,对齐商用数据库周边工具能力。

2. 性能调优:大内存服务器不要用默认参数

256GB 内存的 RISC-V 服务器,shared_buffers 默认 128MB 严重浪费资源。建议调整至内存 25% 左右,配置 HugePages 大页,并针对 8 NUMA 节点做内存绑定。同时建议补一组高并发(如 64/128 线程)压测,把设备的并发扩展能力测出来。

3. 迁移评估:Oracle 兼容模块优先做业务回放

Oracle 迁移场景,优先验证 ivorysql_ora 兼容模块对业务 SQL 的覆盖度,在 RISC-V 环境做全量业务回放测试,确认语法兼容率和性能表现后再推进生产迁移。

写在最后

去 IOE 不是简单的硬件替换,而是软硬件栈的整体适配。本次实测证明,IvorySQL 数据库可以很好地跑通 RISC-V 国产指令集——从源码编译到 Oracle 兼容层,从基础事务语义到并发压测,软件层面没有发现指令集相关的功能性缺陷。

性能这一项,我们希望被这样理解:在 128 核的机器上只用了 4 个线程、参数全默认、缓存只给了 0.05%,跑出了 663 ~ 750 TPS 且全程平稳——这不是一台 RISC-V 服务器的上限,这只是一条干净的起跑线。 差距在芯片,不在我们的代码里;而算力这块地,还空着 97%。

但生产落地,除了数据库本身,还需要配套运维工具、备份监控、中间件驱动共同完成适配。真正的去 IOE,是每一层都能自主可控、每一个环节都能真实跑通。

数据库这一层,IvorySQL 5.4 在 RISC-V 上已经交出了一份合格的答卷。

STM32 BLDC无刷电机霍尔信号捕获与换相控制实战解析 本文深入解析了STM32如何实现BLDC无刷电机的霍尔信号捕获与换相控制。详细阐述了硬件接口配置、定时器霍尔传感器模式的使用、抗干扰的滤波器与软件容错设计,以及中断服务与换相逻辑的实战代码。重点解决了信号抖动、换相不准等常见问题,旨在帮助开发者构建稳定可靠的电机驱动基础。 阅读详情

相关推荐

基于Ollama本地大模型的Python自动化翻译工具开发实践

本文详细介绍了如何利用Ollama本地大模型和Python开发自动化批量翻译工具。通过部署本地开源模型、设计精准提示词、处理长文本分割及多种文档格式,构建了一个兼顾隐私安全、可控性与成本效益的翻译流水线,有效解决了文档批量翻译的痛点。

yhn45678901的博客 560

RISC-V基础指令集:比较、跳转和寻址

上半部分处理的是数据怎么算、怎么在内存和寄存器之间搬运数据。下办部分处理的是另外一个维度:数据算出来之后,程序怎么根据结果做决定,以及怎么访问CPU内部那些控制寄存器。指令全称中文作用slt / sltu小于则置位比较两个寄存器,rs1 < rs2 则 rd = 1,否则 rd = 0小于立即数则置位寄存器与常数比较,结果写 0 或 1jal跳转并链接跳到目标地址,同时把返回地址保存在 rdjalr寄存器跳转并链接跳到 rs1 + offset,同时保存返回地址beq。

weixin_43903002的博客 287

GSM的“时间管理大师”:TDMA时隙、突发脉冲与逻辑信道映射实战图解

本文深入解析GSM网络中的TDMA时隙调度与逻辑信道映射技术,揭示2G网络如何通过精密的时间管理和突发脉冲设计实现高效通信。从TDMA帧结构到GMSK调制优化,详细介绍了GSM的工程艺术及其在现代通信中的延续价值。

weixin_30631587的博客 514

16 倍三角函数加速:MIPS 把机器人关节装进一颗 RISC-V 芯片

这两年谈"物理 AI"的人很多,但真正落到硬件上,最难的不是大模型,而是把 AI 的决策翻译成精准、安全、可预测的物理动作。关节。每个关节必须在空间、重量、功耗和散热的严格约束下,实现平稳且拟人的运动——从肘部到指尖,每一处都是"最后一环"。传统做法是分层堆芯片:一颗跑 AI 推理的 SoC、一颗跑实时控制的 MCU、再来一颗管通信的,通过总线连起来。代价是延迟叠加、链路复杂、功能安全认证碎片化。一颗芯片全包。fill:#333;important;important;fill:none;

嵌入式单片机实验室 333

AUTOSAR FEE 换页机制深度解析:从原理到实现逻辑

​​没有磨损均衡的EEPROM模拟,如同在沙地上建造城堡​​ ——AUTOSAR存储系统设计箴言

汽车电子软件领域知识分享 1342

语义通信高斯信道仿真代码

【代码】语义通信高斯信道仿真代码。

一去不复返的通信er 427

一颗RISC-V BLE SoC,三种产品定位:PHY6270、PHY6217、PHY6257要怎么选?

如果你的项目需要更大的Flash、更低的射频电流,同时还需要CAN FD、USB多端点、AoA/AoD、Mesh和DMIC等功能,那么PHY6270更适合复杂型BLE终端。而这样可以减少不必要的电量消耗,尤其适合电池供电的无线设备的应用。很多的消费电子产品并不需要特别复杂的定位和语音功能,但对芯片的工作电压、封装尺寸、触摸控制、按键扫描和外围驱动能力都会有比较明确的要求。而对于蓝牙产品开发来说,合适的芯片并不一定就是参数最多的,而是能够满足产品功能,同时兼顾功耗、PCB面积、外围器件和量产成本的芯片。

Cheryl13824368625 388

Windows下CMake的下载与安装详解

目录一、CMake介绍二、CMake的下载与安装 一、CMake介绍 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 二、CMake的下载与安装 CMake下载链接:https://cmake.org/download/。 下载最新稳定版即可(Latest Release): 下载完成后,单击“Next”按钮,在下图中勾选“I acce

Wendy的博客 8万+

RISC-V体系结构-基础指令集

在学具体指令之前,先建立一个认识:一条指令,就是CPU能做的一个“动作”。比如把“两个数加起来”,“从内存读一个树”,“跳到程序另外一个地方”,每一个动作对应一条指令。RISC-V的基础整数指令集叫 RC32I\RV64I(RV是RISC-V,32\64是地址宽度,I是Integer整数)。指令全称中文作用lwLoad Word加载字从内存读 4 字节到寄存器swStore Word存储字把寄存器的 4 字节写入内存lbLoad Byte加载字节从内存读 1 字节,符号扩展。

weixin_43903002的博客 150

Unity大世界流式加载:工业级架构与优化秘籍

游戏大厂Unity大世界流式加载框架全景解析:从《原神》《和平精英》等标杆案例出发,深入剖析工业级流式加载的完整技术架构。文章系统介绍了大世界分区块管理、异步加载机制、资源优化策略、多平台适配方案,以及业务联动与团队协作流程。重点阐述了Addressable与AssetBundle应用、空间触发器设计、性能自适应等核心技术,并展望AI预测加载、云游戏等未来方向。全面展现了大厂如何通过流式加载技术实现无缝开放世界体验的技术路径与实践经验。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 613

三峡大学-微机原理与接口技术实验

其中,A15接E1,因此,A15为1,A14A13A12A11A10A9A8A7通过八输入与非门74LS30与E2连接,因此A14A13A12A11A10A9A8A7为11111111,A6A5A4与CBA连接,因此A6A5A4为101,A3A2A1A0不参与译码,因此IO5的地址范围为1111 1111 1101 0000B~1111 1111 1101 1111B,即0FFD0H~0FFDFH。如图1所示,若IO0输出为低电平,则需要E1接高电平,E2接低电平,E3接低电平,CBA的输入为000。

m0_62222486的博客 497

ESP32-P4(RISC-V)运行x86 模拟器 + FreeDOS

Tab5PC开源项目是基于ESP32-P4的嵌入式DOS模拟器,可在巴掌大的M5Stack Tab5上运行FreeDOS,支持VGA图形、SoundBlaster16与AdLib音效、SD卡镜像存储及Wi-Fi文件传输,性能相当于1990年代初486电脑。可安装UCDOS+WPS实现中文办公,运行Doom、Wolfenstein等经典DOS游戏,适合教学演示与复古展示。通过烧录固件并配置SD卡,用户可快速体验90年代中文电脑生态,兼具怀旧性与教育价值。

91创客学堂 588

Python 爬虫实战:36氪创投资讯爬取与行业投融资趋势分析

文章摘要: 本文介绍了使用Python爬取36氪创投频道数据的方法,分析一级市场资金流向与行业趋势。36氪是国内头部创投媒体,其融资数据对判断风口、对标参考和机构动向具有重要价值。通过分析接口结构,项目实现了分页采集、行业分类采集和详情页抓取功能,并处理了反爬机制。技术栈包括requests、BeautifulSoup等工具,适用于创业者、投资人等关注市场动态的群体。

u014481728的博客 297

RISC-V汇编语言与编译流程

前面一直在讨论“指令”和函数调用,但那些指令最终要写进文件,经过一串工具处理,才能变成可以运行的机器码。这章说的是.S的汇编文件,从源码到可执行程序,中间经历了什么?这些伪操作在数据段中分配空间并填入初值。伪操作分配宽度例子含义.byte1字节.byte 0x41写入一个字节2 字节写入一个半字4 字节写入一个字8 字节写入一个双字.ascii不自动补 \0写入字符串,不以 0 结尾自动补 \0写入字符串,以 0 结尾n 字节空白.space 64。

weixin_43903002的博客 266

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

linux学习

sudo make install:组装好的家具(编译好的库文件),原本放在你的临时工作区。坏处是,你的程序体积会变大。于是,他会根据你的计划书,结合你电脑的当前情况(比如装了什么编译器,库在哪),生成一本极度详细的《施工进度表》。很多大牌的第三方库(比如你刚装的 libevent)为了照顾不同的需求,会同时提供动态库(.so)和静态库(.a),但并不是所有库都这样。只有动态库:常见于系统的核心库(比如你系统的底层 C 库),或者一些商业闭源软件(厂商只给你一个黑盒子,不让你直接把代码打包进你的程序)。

d_mail的博客 194

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ubuntu 偶发启动失败问题分析

ubuntu 系统启动偶发异常问题分析

平面到立体 198

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

177.Agent-LangGraph-MCP的构成说明

MCP架构通过MCP主机、客户端与服务器的协同,实现工具、资源与提示词的统一管理。MCP服务器提供Tools、Resources、Prompts能力,MCP客户端则负责发现、调用与读取,使Agent可按需获取上下文。其核心在于将工具从Agent中抽离,封装为可复用的服务,提升灵活性与可维护性,推动AI应用高效协作。

计算机王的博客 291

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 477

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 436

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 251

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 308

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 179

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 159

Docker部署linkding:HTTPS与数据备份

部署私人书签库,除了让页面能够打开,还需要考虑几个实际问题:重建容器后数据是否保留、登录和保存是否正常、升级前怎样备份,以及出现 502 或 CSRF 错误时从哪里检查。本文使用 Docker Compose 部署 linkding,采用默认 SQLite 数据库,通过 Caddy 提供 HTTPS,并完成账户创建、数据持久化验证和备份。如果重建后账户或书签消失,应先检查是否换了项目目录、改了挂载路径,或者启动了另一套实例,不要急着重新初始化。遇到权限问题,应根据日志确认具体目录和运行用户,再调整权限。

tedcloud123的博客 172

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 208

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 295
上一篇: PostgreSQL 日报| relchecks 溢出导致表无法删除(9 月 28 日)
下一篇: PostgreSQL 日报|pgEdge 发布 Starfleet 云平台(9 月 29 日)
IvorySQL
博客等级 码龄5年 745粉丝 566原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值