RISC-V基础之内存分布与映射
内存映射是指将地址空间划分为不同的部分或段,每个段有不同的用途和属性。这段话介绍了五个段:文本段、全局数据段、动态数据段、异常处理器段和操作系统(OS)段。下面是对每个段的简要说明:

- 文本段:存放程序的代码和常量数据,如字符串和数组。文本段是只读的,不能被修改。用户可以自己定义文本段的位置和大小。
- 全局数据段:全局数据段存放全局变量,即可以被程序中所有函数访问的变量。全局变量在程序开始执行之前就在内存中分配好了,通常使用全局指针寄存器gp(寄存器x3)来访问,它指向全局数据段的中间位置。在这个例子中,gp是0x10000800。使用12位有符号偏移量,程序员可以使用gp来访问整个全局数据段。
- 动态数据段:动态数据段包括栈和堆。这个段中的数据在程序启动时是不确定的,而是在程序运行过程中动态分配和释放的。操作系统在程序启动时设置栈指针(sp,寄存器x2)指向栈的顶部,在这个例子中是0xBFFFFFF0。栈通常向下增长,如图所示。栈包括一些临时存储和局部变量,如数组,它们不能放在寄存器中。函数还使用栈来保存和恢复寄存器。每个栈帧按照后进先出的顺序访问。堆存放程序运行时分配的数据。像宿舍地板上的一堆衣服一样,堆中的数据可以按任意顺序使用和丢弃。堆通常从动态数据段的底部向上增长。如果栈和堆相互碰撞了,程序的数据就会被破坏。内存分配器保证这种情况不会发生,如果没有足够的空间来分配更多的动态数据,它会返回一个内存不足的错误。
- 异常处理器、操作系统和I/O段:例子中RISC-V内存映射的最低部分是保留给异常处理器和启动时运行的引导代码的。最高部分是保留给操作系统和内存映射I/O的。内存映射I/O是指将外部设备(如键盘、显示器等)的寄存器映射到内存地址空间中,以便通过读写内存来控制设备。异常处理器、操作系统和I/O段通常是受保护的,只能在特权模式下访问。
RISC-V不定义一个特定的内存映射,而是由用户自己决定各个段的位置和大小。这样可以提供灵活性,特别是对于一些较小的系统,如手持设备,它们可能只使用了部分内存范围,并且只有部分物理内存。
RISC-V要求sp保持16字节对齐,以便与RISC-V基础指令集RV128I兼容,它可以操作128位(即16字节)的数据。因此,sp每次减少16的倍数来为栈腾出空间,即使需要更少的栈空间也是如此。
RISC-V要求sp保持16字节对齐,这意味着sp的值必须是16的倍数。这样做的原因是为了与RISC-V基础指令集RV128I兼容,它可以操作128位(即16字节)的数据。如果sp不是16字节对齐的,那么RV128I指令就不能正确地访问栈上的数据,可能会导致数据错误或异常。因此,为了保证兼容性和正确性,RISC-V规定了sp的对齐要求。
因此,sp每次减少16的倍数来为栈腾出空间,即使需要更少的栈空间也是如此。例如,如果一个函数需要在栈上分配8个字节的空间,那么sp就要减少16个字节,而不是8个字节。这样做会浪费一些内存空间,但是可以保证sp始终是16字节对齐的。
相关文章:
RISC-V基础之内存分布与映射
内存映射是指将地址空间划分为不同的部分或段,每个段有不同的用途和属性。这段话介绍了五个段:文本段、全局数据段、动态数据段、异常处理器段和操作系统(OS)段。下面是对每个段的简要说明: 文本段:存放程序…...
【Unity3D应用案例系列】Unity3D中实现文字转语音的工具开发
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中,会遇到将文字转语音输出的需求࿰…...
STM32入门——定时器
内容为江科大STM32标准库学习记录 TIM简介 TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时&…...
企业工商信息:知识产权出质
一、出质是什么?质权是什么? 出质,作为一种物权行为,是指将个人或企业所拥有的财产权益移交给他人作为抵押,以获得资金支持。这一概念在商业活动中扮演着重要的角色,为企业创造了融资渠道。特别是在知识密…...
batch_softmax_loss
每个用户抽取一定数量的困难负样本,然后ssm def batch_softmax_loss_neg(self, user_idx, rec_user_emb, pos_idx, item_emb):user_emb rec_user_emb[user_idx]product_scores torch.matmul(F.normalize(user_emb, dim1), F.normalize(item_emb, dim1).transpose(…...
刘汉清:从生活到画布,宠物成为灵感源泉
出生于中国镇江的艺术家刘汉清,其作品展现出他对日常生活的深入洞察力,以及对美的独特理解。他的作品通常没有视觉参考,而是通过对他周围环境的理解,尤其是他的宠物,来进行创作。 在刘汉清的创作过程中,他…...
【LeetCode】240.搜索二维矩阵Ⅱ
题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,…...
SED正则表达式中[方括号]的特殊处理
今天被这个方括号懵晕了,特此记录 例如: 去除输入字符串“1[2.3]4[ab,c]”中的所有方括号和逗号: $ echo "1[2.3]4[ab,c]"|sed -e "s/[,\]\[]//g" 1[2.3]4[ab,c] It doesnt work! 原因:Regular Expressi…...
Android 音频开发
在Android平台上进行音频开发,您需要掌握以下关键知识点: Android平台基础知识:熟悉Android操作系统的基本架构、组件和应用开发的基本概念。 音频API:了解Android提供的音频相关API,主要包括android.media.AudioReco…...
Java8新特性,Lambda,Stream流
Java8新特性,Lambda,Stream流 Java8版本在2014年3月18日发布,为Java语言添加了很多重要的新特性。新特性包括:Lambda表达式、方法引用、默认方法、新的时间日期API、Stream API、Optional类等等。这些新特性大大增强了Java语言的表达能力,使…...
模型训练之train.py代码解析
题目 作者:安静到无声 个人主页 from __future__ import absolute_import from __future__ import division from __future__ import print_function这段代码使用了Python 2.x的__future__模块来导入Python 3.x的一些特性。在Python 2.x中,使用print语句来输出内容,而在Py…...
linux 复习
vim 使用 一般模式 、 命令模式、编辑模式 esc 进入一般模式 i 进入编辑模式 shift: 进入命令模式 yy p 复制粘贴 5yy 复制当前开始的5行 dd 删除 5dd 删除当前开始的5行 u撤销操作 ctrlr 恢复 shiftg 滚动最底部 gg 滚动最顶 输入数字 然后shiftg 跳转到指定行 用户操作…...
C语言刷题------(2)
C语言刷题——————(2) 刷题网站:题库 - 蓝桥云课 (lanqiao.cn) First Question:时间显示 题目描述 小蓝要和朋友合作开发一个时间显示的网站。 在服务器上,朋友已经获取了当前的时间,用一个整数表…...
JVM 之 OopMap 和 RememberedSet
前几天看周志明的《深入 Java 虚拟机》,感觉对 OopMap 和 RememberedSet 的介绍,看起来不太容易理解清楚。今天查了一些资料,并结合自己的一些猜想,把对这两种数据结构的理解写出来。目的只是为了简单易懂,而且多有推测…...
Original error: gsmCall method is only available for emulators
在夜神模拟器执行报错 self.driver.make_gsm_call(5551234567, GsmCallActions.CALL)意思是gsmCall这个命令不支持,只支持下面这些命令 selenium.common.exceptions.UnknownMethodException: Message: Unknown mobile command "gsmCall". Only shell,exe…...
React Native从文本内容尾部截取显示省略号
<Textstyle{styles.mMeNickname}ellipsizeMode"tail"numberOfLines{1}>{userInfo.nickname}</Text> 参考链接: https://www.reactnative.cn/docs/text#ellipsizemode https://chat.xutongbao.top/...
机器学习笔记之优化算法(十一)凸函数铺垫:梯度与方向导数
机器学习笔记之优化算法——凸函数铺垫:梯度与方向导数 引言回顾:偏导数方向余弦方向导数方向导数的几何意义方向导数的定义 方向导数与偏导数之间的关联关系证明过程 梯度 ( Gradient ) (\text{Gradient}) (Gradient) 引言 本节作为介绍凸函数的铺垫&a…...
探究Vue源码:mustache模板引擎(11) 递归处理循环逻辑并收尾算法处理
好 在上文 探究Vue源码:mustache模板引擎(10) 解决不能用连续点符号找到多层对象问题,为编译循环结构做铺垫 我们解决了js字符串没办法通过 什么点什么拿到对象中的值的问题 这个大家需要记住 因为这个方法的编写之前是当做面试题出现过的 那么 本文 我们就要去写上…...
STM32 CubeMX USB_CDC(USB_转串口)
STM32 CubeMX STM32 CubeMX 定时器(普通模式和PWM模式) STM32 CubeMX一、STM32 CubeMX 设置USB时钟设置USB使能UBS功能选择 二、代码部分添加代码实验效果 printf发…...
机器学习——卷积神经网络基础
卷积神经网络(Convolutional Neural Network:CNN) 卷积神经网络是人工神经网络的一种,是一种前馈神经网络。最早提出时的灵感来源于人类的神经元。 通俗来讲,其主要的操作就是:接受输入层的输入信息&…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
