「RISC-V Arch」RISC-V 规范结构
日期:20230228
规范分类
根据 RISC-V 设计哲学,其规范文档也是高度模块化的:
ISA 规范(2 篇)
- 非特权规范
- 特权规范
非 ISA 规范(6篇)
- Trace规范
- ABI 规范
- 外部调试规范
- PLIC 规范
- SBI 规范
- UEFI 协议规范
以及其他未合并的扩展规范,目前不是重点
ISA | none-ISA | |
正式审批 | Volume 1, Unprivileged Specification version 20191213 [PDF] Volume 2, Privileged Specification version 20211203 [PDF] | 表 2,6 个规范 |
审批未集成 | 见表 3,16 个扩展 | RISC-V Non-ISA Specifications · GitHub |
进行中 | Specification Status - Home - RISC-V International (riscv.org),20+ |
Specification name | Version | Publish Date | Description | RISC-V Community | Source Repository |
---|---|---|---|---|---|
Efficient Trace for RISC-V | 2.0 | June 2022 | Specifies the signals between the RISC-V core and the encoder, compressed branch trace algorithm, and the packet format used to encapsulate the compressed branch trace information to implement processor tracing. | SOC Infrastructure Horizontal Committee | riscv-non-isa/tech-trace-spec |
RISC-V ABIs Specification | 1.0 | November 2022 | Provides the processor-specific application binary interface document for RISC-V | Application & Tools Horizontal Committee | riscv-non-isa/riscv-elf-psabi-doc |
RISC-V External Debug Support | 0.13.2 | March 2019 | Outlines a standard architecture for external debug support on RISC-V platforms. | SOC Infrastructure Horizontal Committee | riscv/tech-debug-spec |
RISC-V Platform-Level Interrupt Controller Specification | 1.0.0 | February 2023 | Delineates the operational parameters for a platform-level interrupt controller on RISC-V. | Privileged Software Horizontal Committee | riscv/riscv-plic-spec |
RISC-V Supervisor Binary Interface Specification | 1.0.0 | May 2022 | Describes the RISC-V Supervisor Binary Interface, known from here on as SBI which enables supervisor-mode (S-mode or VS-mode) software to be portable across all RISC-V implementations by defining an abstraction for platform (or hypervisor) specific functionality. | Privileged Software Horizontal Committee | riscv-non-isa/riscv-sbi-doc |
RISC-V UEFI Protocol Specification | 1.0.0 | May 2022 | Details all new UEFI protocols required only for RISC-V platforms. | Privileged Software Horizontal Committee | riscv-non-isa/riscv-uefi |
RV32E and RV64E Base Integer Instruction Sets | January 2023 | RV32E/RV64E |
“Ztso” Standard Extension for Total Store Ordering | January 2023 | Ztso |
RISC-V Wait-on-Reservation-Set (Zawrs) extension | November 2022 | Zawrs |
Zmmul Extension | June 2022 | Zmmul |
PMP Enhancements for memory access and execution prevention on Machine mode (Smepmp) | November 2021 | Smepmp |
RISC-V Base Cache Management Operation ISA Extensions | November 2021 | Zicbom, Zicbop, Zicboz |
RISC-V Bit-Manipulation ISA-extensions | November 2021 | Zba, Zbb, Zbc, Zbs |
RISC-V Count Overflow and Mode-Based Filtering Extension | November 2021 | Sscofpmf |
RISC-V Cryptography Extensions Volume I: Scalar & Entropy Source Instructions | November 2021 | Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh, Zkn, Zks, Zkt, Zk, Zkr |
RISC-V State Enable Extension | November 2021 | Smstateen |
RISC-V "stimecmp / vstimecmp" Extension | November 2021 | Sstc |
RISC-V Vector Extension | November 2021 | Zve32x, Zve32f, Zve64x, Zve64f, Zve64d, Zve, Zvl32b, Zvl64b, Zvl128b, Zvl256b, Zvl512b, Zvl1024b, Zvl, Zv |
The RISC-V Instruction Set Manual Volume II: Privileged Architecture | November 2021 | Sm1p12, Ss1p12, Sv57, Hypervisor, Svinval, Svnapot, Svpbmt |
"Zfh" and "Zfhmin" Standard Extensions for Half-Precision Floating-Point | November 2021 | Zfh, Zfhmin |
"Zfinx", "Zdinx", "Zhinx", "Zhinxmin": Standard Extensions for Floating-Point in Integer Registers | November 2021 | Zfinx, Zdinx, Zhinx, Zhinxmin |
“Zihintpause” Pause Hint | February 2021 | Zihintpause |
非特权 ISA 规范
非特权 ISA 规范对硬件平台术语、软件执行环境和 Harts、ISA 概述、内存、指令编码、异常/陷入/中断、非定义行为和数值等进行了简要的介绍。
规范重点描述了 RISC-V ISA 子集:RV32I 32 位整数指令集、RV32E 32 位精简整数指令集、RV64I/RV128I 64/128 位整数指令集、M 整数整除法指令集、A 原子操作指令集、Zicsr 控制状态寄存器、F 单精度浮点指令集、D 双精度浮点指令集、Q 双字精度浮点指令集、RVWMO 内存一致性等。
特权 ISA 规范
特权 ISA 规范首先对特权软件栈术语、特权级别、调试模式进行了简要介绍。
其次,对特权模式下的控制状态寄存器进行了介绍。
特权 ISA 分为 M 级别和 S 级别的特权级别。
对于 M 级别,介绍了 M 级别的控制状态寄存器、内存映射寄存器、特权指令、复位、不可屏蔽中断、物理地址属性、物理地址保护。
对于 S 级别,介绍了 S 级别的控制状态寄存器、指令、32/39/48/57 位虚拟内存系统、svnapot 翻译相邻性、svpbmt 基于页内存类型、svinval 小粒度地址转换表内存无效等。
hypervisor 扩展介绍了特权模式、hypervisor和虚拟 S 模式控制状态寄存器、指令、机器级别的控制状态寄存器、两级地址转换、陷入等。
ABI 规范
介绍
本规范为 RISC-V 提供了处理器专用应用二进制接口文档,本规范由以下三部分组成:
- 调用规约
- ELF 规范
- DWARF 规范
该ABI的未来修订版将包括内存模型的规范映射集同步原语。
术语缩略语
ABI 状态
调用规约
调用规约主要从寄存器约定、过程调用约定、系统调用约定、C/C++ 类型描述、Linux 特定的 ABI 等方面进行了介绍。
寄存器约定:整数、浮点数、向量寄存器的一些约定。
过程调用约定:整数调用约定、硬件浮点调用约定、ILP32E 调用约定、ABI 命名、默认 ABI 等。
系统调用约定:未在本文档中规定,参考 RISC-V execution environment interface (e.g OS kernel ABI, SBI)。
C/C++ 类型描述:类型大小和对齐方式、类型表示、va_list/va_start/va_arg。
Linux 特定 ABI:类型大小和对齐方式、类型表示。
PLIC 规范
PLIC 指的是平台级别的中断控制器,PLIC 规范主要从以下几个方面进行了介绍:
- 中断目标和 Hart 上下文、中断网关、中断通知、中断号、中断流程
- PLIC 操作参数
- 内存映射
- 中断优先级
- 中断等待状态位
- 中断使能
- 中断阈值
- 中断声明过程
- 中断完成
SBI 规范
这个规范描述了 RISC-V 超级二进制接口,即SBI,通过 SBI 接口, RISC-V 能够实现 S 模式、VS 模式代码能够在不同的平台之间的可移植性。SBI 遵循了 RISC-V 的设计哲学,由一个非常小的核心部分和一些可选的模块扩展组成。
SBI 整体来说是一个扩展,也就是说要不实现,要么就要完整实现。如果 sbi_probe_extention 指示出某个功能可用,那么所有版本要求的功能都需要实现,这个版本可以通过 sbi_get_spec_version 来获得。
高特权软件向管理模式提供 SBI 接口支持,这个软件可以叫做 SBI 实现或者 SEE。SEE 可以是图1中的 M 模式下运行时固件,也可以是图2 中的 HS 模式运行的虚拟机管理程序。
SBI 规范不会指定任何硬件发现的方法,S 模式软件必须通过其他工业标准来获取,比如 Device Tree 或者 ACPI。
UEFI 协议规范
设备树(DT)或高级配置和电源接口(ACPI)配置表用于向操作系统传达有关硬件的信息:一些
只有在启动时才知道信息,并且在操作系统或者引导器启动之前很早就需要这些信息来解析固件表。
一个例子是 RISC-V 系统上的引导 hartid。在非 UEFI 系统上,这通常作为内核的参数(在 a0中),但是,UEFI 系统需要遵循 UEFI 应用程序调用,因此不能在 a0 中传递。有一个现有的解决方案使用 DTS 中的 /chosen 节点传递此信息。然而,此解决方案不适用于基于 ACPI 的系统,因此,UEFI 协议对于基于 DT 和 ACPI 的系统都是优选的。
RISC-V 系统的 UEFI 协议为引导加载程序或操作系统提供早期信息系统。EDK2 和 u-boot 等固件需要在 RISC-V UEFI 系统上实现该协议。
该协议通常由引导加载程序在调用 ExitBootServices()之前调用。然后他们通过将信息发送给操作系统。
本规范规定的 RISCV_EFI_BOOT_PROTOCOL 版本为 0x00010000。全部的未来的版本必须向后兼容。如果新版本的规范出现倒退兼容性,必须定义新 GUID。
Trace规范
介绍
在复杂系统中,理解程序行为并不容易。在这样的系统中,软件有时不能按预期运行。这可能是由许多因素导致。例如,与其他核心、软件、外围设备的交互、实时事件、较差的实现或以上这些组合。
因为调试器的侵入性特点,并非总是可以使用调试器来观察正在运行的系统。提供程序运行数据的可视化非常重要,这需要在不产生大量数据情况下实现。
一个实现方法是通过采用处理器分支跟踪技术。
通过从指定执行地址进行跟踪,并让其将程序运行的 delta 以消息的形式发出来实现,这些 delta 主要由跳转、调用、返回以及分支指令导致,当然中断和异常也能导致 delta 改变。
因此,系统需要具有一些必备的组件:
- 一种带有指令跟踪接口的内核,该接口输出所有相关信息,以允许成功创建处理器分支跟踪等。这是一个高带宽接口:在大多数实现中,它将为每个核心执行时钟周期提供大量数据(指令地址、指令类型、上下文信息等)
- 连接到指令跟踪接口并将信息压缩为较低带宽跟踪包的硬件编码器
- 连接到此指令跟踪接口并压缩将信息转换成较低带宽跟踪分组;
- 用于传输的传输通道或用于存储这些跟踪数据包的存储器;
- 一种解码器,通常是外部 PC上的软件,它接收跟踪数据包,并在知道原始哈特上运行的程序二进制文件的情况下,重建程序流。该解码步骤可以在 hart 执行时离线或实时完成
在 RISC-V 中,所有指令都是无条件执行的,或者至少可以根据程序二进制来确定它们的执行。可以假设增量之间的指令都是顺序执行的。因此,无需对整个指令流进行跟踪,只需要显示分支是否被执行以及间接执行的分支地址即可。当程序计数器的更改量无法从执行二进制文件时,需要为跟踪解码器提供目标地址(即地址下一个有效指令的)。例如,间接分支或跳转指令地址由寄存器的内容而不是嵌入的常量决定程序二进制文件。
中断通常与程序的执行异步发生,而不是故意作为特定指令或事件的结果。可以用相同的方式来考虑异常,即使它们通常可以链接回特定的指令地址。解码器通常不知道中断在指令序列中的何处发生,因此跟踪编码器必须报告正常程序流停止的地址,并给出异步目的地的指示,这可能与报告异常类型一样简单。当发生中断或异常,或处理器停止时,必须在跟踪中包含预先失效的最终指令。
本文档用于指定入口端口(RISC-V 核心和编码器之间的信号)、压缩分支跟踪算法以及用于封装压缩分支跟踪信息的数据包格式。
术语缩略语
ATB: Arm trace bus
- branch: an instruction which conditionally changes the execution flow
- CSR: control/status register
- decoder: a piece of software that takes the trace packets emitted by the encoder and reconstructs the execution flow of the code executed by the RISC-V hart
- delta: a change in the program counter that is other than the difference between two instructions placed consecutively in memory
- discontinuity: another name for ’delta’ (see above)
- ELF: executable and linkable format
- encoder: a piece of hardware that takes in instruction execution information from a RISC-V hart and transforms it into trace packets
- EPC: exception program counter
- exception: an unusual condition occurring at run time associated with an instruction in a RISC-V hart
- hart: a RISC-V hardware thread
- interrupt: an external asynchronous event that may cause a RISC-V hart to experience an unexpected transfer of control
- ISA: instruction set architecture
- jump: an instruction which unconditionally changes the execution flow
- direct jump: an instruction which unconditionally changes the execution flow by changing the PC by a constant value
- indirect jump: an instruction which unconditionally changes the execution flow by changing the PC to a computed value
- inferable jump: a jump where the target address is supplied via a constant embedded within the jump opcode • uninferable jump: a jump which is not inferable (see above)
- LSB: least significant bit
- MSB: most significant bit
- packet: the atomic unit of encoded trace information emitted by the encoder
- PC: program counter
- program counter: a register containing the address of the instruction being executed
- retire: the final stage of executing an instruction, when the machine state is updated (some times referred to as ’commit’ or ’graduate’)
- trap: the transfer of control to a trap handler caused by either an exception or an interrupt
- updiscon: contraction of ’uninferable PC discontinuity’
规范主要介绍了编码器控制、分支跟踪、Hart 编码器接口、过滤器、时间戳、指令编码器输出包、数据跟踪编码器输出包、参考压缩分支跟踪算法、参数和发现、编码器、代码和包示例、代码片段和传输、未来方向等。
外部调试规范
介绍
当设计从模拟发展到硬件实现时,用户对系统当前状态的控制和理解会急剧下降。帮助启动和调试低级别软件和硬件,在硬件中内置良好的调试支持至关重要。当一个健壮的操作系统在内核上运行,软件可以处理许多调试任务。然而,在许多情况下硬件支持至关重要。
本文档概述了 RISC-V 平台上外部调试支持的标准架构。该体系结构允许多种实现和权衡,这是对
广泛的 RISC-V 实现。同时,本规范定义了接口,允许调试工具和组件基于 RISC-V ISA。
系统设计者可以选择添加额外的硬件调试支持,但本规范定义通用功能的标准接口
系统概述
图 3 显示了外部调试的主要组件,虚线所示的块是可选的。
用户与正在运行调试器(例如 gdb)的调试主机(例如笔记本电脑)交互。调试器与调试转换器(例如 OpenOCD,其可以包括硬件驱动程序)通信,以与调试传输硬件(例如 Olimex USB-JTAG 适配器)通信。调试传输硬件将调试主机连接到平台的调试传输模块(DTM)。DTM 使用调试模块接口(DMI)提供对一个或多个调试模块(DM)的访问。
平台中的每一个 Hart 都由一个 DM 控制,Hart 可能是异构的,hart-DM 映射没有进一步的限制,但通常单个内核中的所有hart都由同一个 DM 控制。在大多数平台中,只有一个 DM 可以控制平台中的所有 Hart 。
DM 在平台中提供对 Hart 的运行控制,抽象命令提供对 GPR 的访问,可以通过抽象命令或将程序写入可选的程序缓冲区来访问其他寄存器。
程序缓冲区允许调试器在 Hart 上执行任意指令,该机制也可用于访问内存,可选的系统总线访问块允许在不使用 RISC-V Hart 执行访问的情况下进行存储器访问。
每个 RISC-V Hart 可以实现一个触发模块。当满足触发条件时,harts 将停止并通知调试模块。
此外,规范描述了调试模块、RISC-V 调试、调试传输模块、硬件实现、调试器实现等。
皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~
“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~
下一篇 「RISC-V Arch」SBI 规范解读(上)
相关文章:
「RISC-V Arch」RISC-V 规范结构
日期:20230228 规范分类 根据 RISC-V 设计哲学,其规范文档也是高度模块化的: ISA 规范(2 篇) 非特权规范特权规范 非 ISA 规范(6篇) Trace规范ABI 规范外部调试规范PLIC 规范SBI 规范UEFI 协…...
【C】线程控制
创建线程 #include <pthread.h>int pthread_create(pthread_t * thread,const pthread_attr_t * attr,void *(*start_routine)(void*), void * arg);返回值:成功返回0,失败返回错误号。 thread:成功返回后,新创建的线程的…...
Maven工程打jar包的N种方式
Maven工程打jar包 一、IDEA自带打包插件二、maven插件打包2.1 制作瘦包(直接打包,不打包依赖包)2.2 制作瘦包和依赖包(相互分离)2.3 制作胖包(项目依赖包和项目打为一个包)2.4 制作胖包…...
一文了解GPU并行计算CUDA
了解GPU并行计算CUDA一、CUDA和GPU简介二、GPU工作原理与结构2.1、基础GPU架构2.2、GPU编程模型2.3、软件和硬件的对应关系三、GPU应用领域四、GPUCPU异构计算五、MPI与CUDA的区别一、CUDA和GPU简介 CUDA(Compute Unified Device Architecture)…...
全网资料最全Java数据结构与算法(1)
一、数据结构和算法概述 1.1什么是数据结构? 官方解释: 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 大白话: 数据结构就是把数据元素按照一定的关系组织起来的集合&a…...
【项目实战】SpringMVC拦截器HandlerInterceptor入门介绍
一、拦截器介绍 拦截器是应用程序级框架中常用的拦截用户请求、实施业务流程控制的模式,它可以将一些公共的、重复发生的业务逻辑从业务处理代码中独立出来,使系统的结构更加清晰,程序的复杂度也减小了。 拦截器是一个常见的特性,它可以实现任何自定义功能,而无需调整业…...
阿里淘宝新势力造型合伙人P8、年薪百万的欧阳娜娜也躲不过的魔鬼面试,看的我心服口服
阿里淘宝新势力造型合伙人P8、年薪百万的欧阳娜娜跳槽了,这不是关键。 她参加了网易有道明星语音录音员/代言人的面试,这也不是关键。 关键是她教科书式的面试过程,狠狠地给我们上了一课。 我是无意间刷到的这个视频的时候,就一…...
深度学习笔记:不同的反向传播迭代方法
1 随机梯度下降法SGD 随机梯度下降法每次迭代取梯度下降最大的方向更新。这一方法实现简单,但是在很多函数中,梯度下降的方向不一定指向函数最低点,这使得梯度下降呈现“之”字形,其效率较低 class SGD:"""随机…...
ElasticSearch 学习笔记总结(三)
文章目录一、ES 相关名词 专业介绍二、ES 系统架构三、ES 创建分片副本 和 elasticsearch-head插件四、ES 故障转移五、ES 应对故障六、ES 路由计算 和 分片控制七、ES集群 数据写流程八、ES集群 数据读流程九、ES集群 更新流程 和 批量操作十、ES 相关重要 概念 和 名词十一、…...
深入理解border以及应用
深入border属性以及应用👏👏 border这个属性在开发过程中很常用,常常用它来作为边界的。但是大家真的了解border吗?以及它的形状是什么样子的。 我们先来看这样一段代码:👏 <!--* Author: syk 185901…...
如何复现论文?什么是论文复现?
参考资料: 学习篇—顶会Paper复现方法 - 知乎 如何读论文?复现代码?_复现代码是什么意思 - CSDN 我是如何复现我人生的第一篇论文的 - 知乎 在我看来,论文复现应该有一个大前提和分为两个层次。 大前提是你要清楚地懂得自己要…...
22.2.28打卡 Codeforces Round #851 (Div. 2) A~C
A题 One and Two 题面翻译 题目描述 给你一个数列 a1,a2,…,ana_1, a_2, \ldots, a_na1,a2,…,an . 数列中的每一个数的值要么是 111 要么是 222 . 找到一个最小的正整数 kkk,使之满足: 1≤k≤n−11 \leq k \leq n-11≤k≤n−1 , anda1⋅a2⋅……...
Learining C++ No.12【vector】
引言: 北京时间:2023/2/27/11:42,高数考试还在进行中,我充分意识到了学校的不高级,因为题目真的没什么意思,虽然挺平易近人,但是……,考试期间时间比较放松,所以不能耽误…...
【数电基础】——逻辑代数运算
目录 1.概念 1.基本逻辑概念 2.基本逻辑电路(与或非) 逻辑与运算 与门电路: 逻辑或运算 或门电路: 逻辑非运算(逻辑反) 非门电路编辑 3.复合逻辑电路(运算) 与非逻辑…...
【Redis】什么是缓存与数据库双写不一致?怎么解决?
1. 热点缓存重建 我们以热点缓存 key 重建来一步步引出什么是缓存与数据库双写不一致,及其解决办法。 1.1 什么是热点缓存重建 在实际开发中,开发人员使用 “缓存 过期时间” 的策略来实现加速数据读写和内存使用率,这种策略能满足大多数…...
互联网衰退期,测试工程师35岁之路怎么走...
国内的互联网行业发展较快,所以造成了技术研发类员工工作强度比较大,同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高,超过35岁的基层研发类员工,往往因为家庭原因、身体原因,比较难以跟得上工作…...
动态规划(以背包问题为例)
1) 要求达到的目标为装入的背包的总价值最大,并且重量不超出2) 要求装入的物品不能重复动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。动态规划算法与分治算法类似ÿ…...
Java异常
异常的体系结构 在java的Throwable下有Error和Exception两个子类 Error(错误):程序运行中出现了严重的问题,非代码性错误,无法处理,常见的有虚拟机运行错误和内存溢出等Exception(异常):是由于代码本身造成的问题,可以进行处理,异常一个可以分为运行时异常和编译时异常 运行…...
别克GL8改装完工,一起来看看效果
①豪华商务头等舱 别克GL8作为商务车,不管是家用还是商务接待,原车内饰都太掉档次了,所以车主要求全部换掉。>>织布座椅换成航空座椅 主副驾:改装纳帕皮 中排:改装水晶宝座豪华版航空座椅,带通风、加…...
mac 中 shell 一些知识
mac 设置环境变量首先得看你所使用的 shell shell 是一个命令行解释器,顾名思义就是机器外面的一层壳,用于人机交互,只要是人与电脑之间交互的接口,就可以称为 shell。表现为其作用是用户输入一条命令,shell 就立即解…...
CentOS 配置FTP(开启VSFTPD服务)
网上已经有很多关于VSFTPD的配置,但有两个通病,要么就是原理介绍太多,要么就是不完整,操作下来又要查询多篇文章才能用。 我这里不讲原理,只记录操作,尽可能通过复制下面的操作可以实现FTP读写功能。方便自…...
Http的请求方法
Http的请求方法对应的数据传输能力把Http请求分为Url类请求和Body类请求 1.Url类请求包括但不限于GET、HEAD、OPTIONS、TRACE 等请求方法 2.Body类请求包括但不限于POST、PUSH、PATCH、DELETE 等请求方法。 3.原因:get请求没有请求体(好像也可以…...
Python字典-- 内附蓝桥题:统计数字
字典 ~~不定时更新🎃,上次更新:2023/02/28 🗡常用函数(方法) 1. dic.get(key) --> 判断字典 dic 是否有 key,有返回其对应的值,没有返回 None 举个栗子🌰 dic …...
文本处理工具
Grep工具的基本使用grep作用:grep是行过滤工具;用于根据关键字进行行过滤提示:通过alias命令设置grep别名,搜索参数时带颜色显示alias grepgrep colorauto 命令语法格式:grep [选项] 参数 文件名grep命令选项ÿ…...
C++STL详解(三)——vector的介绍和使用
文章目录vector的介绍vector的使用vector的定义方式vector的空间增长问题reserve和resizevector的迭代器使用begin 和endrbegin和rendinsert 和erasefind函数元素访问vector迭代器失效问题1:inserse插入扩容时空间销毁造成野指针问题2:erase删除或者inse…...
GEBCO海洋数据下载
一、数据集简介 GEBCO(General Bathymetric chart of the Oceans)旨在为世界海洋提供最权威的、可公开获取的测深数据集。 目前的网格化测深数据集,即GEBCO_2022网格,是一个全球海洋和陆地的地形模型,在15角秒间隔的…...
【C++容器】vector、map、hash_map、unordered_map四大容器的性能分析【2023.02.28】
摘要 vector是标准容器对数组的封装,是一段连续的线性的内存。map底层是二叉排序树。hash_map是C11之前的无序map,unordered_map底层是hash表,涉及桶算法。现对各个容器的查询与”插入“性能做对比分析,方便后期选择。 测试方案…...
ACM-蓝桥杯训练第一周
🚀write in front🚀 📝个人主页:认真写博客的夏目浅石.CSDN 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:ACM周训练题目合集.CSDN 💬总结:…...
python基础—字符串操作
(1)字符串: Python内置了一系列的数据类型,其中最主要的内置类型是数值类型、文本序列(字符串)类型、序列(列表、元组和range)类型、集合类型、映射(字典)类型…...
【Spring】通过JdbcTemplate实现CRUD操作
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 通过JdbcTemplate实现 增删查改一、添加相关依…...
wordpress首显示全文页/上海百度搜索排名优化
又是期末又是实训TA的事耽搁了好久……先把写好的放上博客吧相关随笔:使用额外的文件假如你跑的job除了输入以外还需要一些额外的文件(side data),有两种选择:大文件所谓的大文件就是大小大于设置的local.cache.size的文件,默认是…...
湖州网站建设服务/竞价推广和信息流推广
编程语言 Java 和 C 自 2016 年初就呈现出下降趋势,今年较之去年下降约 6%。其他编程语言乘势往上爬。其实,这一现象的出现也是有原因的。如今,各行各业的软件使用率都很高, C 和 Java 已经不能满足大家的需求,于是&am…...
网站导航为什么用ul列表做/搜收录批量查询
题目描述 输入N,求N!末尾的第一个非零数字。如6 ! 720,因此6的阶乘末尾的非零位是2。 输入描述: 仅一行,包含一个整数N(0<N<10,000,000) 输出描述: 仅一行,包含一个整数,…...
本人做静态网站开发/百度关键词搜索排名统计
一、什么是多态(方法的多态)多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒,从外面看我们是不可能知道这…...
快速搭建网站工具/2024小学生时事新闻十条
人脸检测及识别python实现系列(3)——为模型训练准备人脸数据 机器学习最本质的地方就是基于海量数据统计的学习,说白了,机器学习其实就是在模拟人类儿童的学习行为。举一个简单的例子,成年人并没有主动教孩子学习语言…...
哪些网站可以做平面设计/如何做企业网站
网络设备 什么是网络架构?网络体系结构的类型 网络体系结构理解为构成通信系统的层和层协议集。 网络架构为解决构建网络时的关键问题提供了不同的方法:通过构建网络的设备快速高效地传输数据。使用的网络体系结构类型不仅将决定网络拓扑,…...