risc-v 怎么使用内存呢?

内存地址对齐
一般写法

#define ALIGN_4_BYTES 4
#define ALIGN_4_MASK (ALIGN_4_BYTES - 1)
//4字节地址对齐
static inline uintptr_t align_4_bytes(uintptr_t address) {
    return (address + ALIGN_4_MASK) & ~ALIGN_4_MASK;
}
//定义页大小是4k,2的12次方是4096
#define PAGE_SIZE 4096
#define PAGE_ORDER 12

//4k地址对齐
static inline ptr_t _align_page(ptr_t address) {
 ptr_t order = (1 << PAGE_ORDER) - 1;
  return (address + order) & (~order);
}

解释

1 << PAGE_ORDER =2的12方 order-1 的值是 0xFFF,它的二进制表示是 1111 1111 1111。
address加上 order(即 0xFFF 或 4095)是为了确保任何未对齐的地址在加上 order 后会超过下一个页面边界。然后,通过清空低12位,可以将地址对齐到下一个4KB边界。

示例:

对于已经对齐的地址,例如 0x1000:
0x1000 + 0xFFF = 0x1FFF
0x1FFF & 0xFFFFF000 = 0x1000(保持不变)

对于未对齐的地址,例如 0x1003:
0x1003 + 0xFFF = 0x2002
0x2002 & 0xFFFFF000 = 0x2000(对齐到下一个4KB边界)


保留页

内存就是一段数组,可以有多种使用策略,好比进入一个小区, 要先登记, 然后,有人带路不迷路。
内部的分配单位是页,保留页就是小区物业,看大门的大爷, 你大爷还是你大爷。那么需要多少的保留页呢?

  1. 管理页面状态:每个页面需要一个数据结构来存储其状态信息。
  2. 内存管理效率:集中存储页面描述符可以提高内存管理的效率。
  3. 避免内存碎片:集中存储页面描述符可以减少内存碎片。
#define PAGE_SIZE 4096

struct Page {
  uint8_t flags;
};

void calculate_reserved_pages(uint32_t length_ram) {
  uint32_t total_pages = length_ram / PAGE_SIZE;
  //向上取整,给够充足的空间
  uint32_t num_reserved_pages = (total_pages * sizeof(struct Page) + PAGE_SIZE - 1) / PAGE_SIZE;
  printf("Total pages: %u\n", total_pages);
  printf("Reserved pages: %u\n", num_reserved_pages);
}

int main() {
  uint32_t length_ram = 256 * 1024 * 1024; // 256MB
  calculate_reserved_pages(length_ram);
  return 0;
}

为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

JNPF可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/764468.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端环境1】安装nvm

【前端环境1】安装nvm 写在最前面一、卸载node二、下载nvm三、安装教程四、验证nvm安装五、nvm配置node常用命令 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#…

接口测试流程及测试点!

一、什么时候开展接口测试 1.项目处于开发阶段&#xff0c;前后端联调接口是否请求的通&#xff1f;&#xff08;对应数据库增删改查&#xff09;--开发自测 2.有接口需求文档&#xff0c;开发已完成联调&#xff08;可以转测&#xff09;&#xff0c;功能测试展开之前 3.专…

“私域流量:解锁电商新机遇,共创数字化未来“

一、私域流量的战略意义再探 步入数字化浪潮的深处&#xff0c;流量已成为企业成长不可或缺的血液。与广泛但难以掌控的公域流量相比&#xff0c;私域流量以其独特的专属性和复用潜力&#xff0c;为企业铺设了通往深度用户关系的桥梁。它不仅赋能企业实现精准营销&#xff0c;…

MySQL-核心知识要点

1、索引的数据结构-Btree BTree的优势&#xff1a; B树的内节点无data&#xff0c;一个节点可以存储更多的K-V对。在构造树时&#xff0c;需要的内节点会更少&#xff0c;那么树的层级也会越低。查询一条数据时&#xff0c;1. 扫描的层级低&#xff0c;扫描过的节点更少&…

VBA字典与数组第十六讲:行、列数不相同的数组间运算规律

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

分布式链路追踪Micrometer Tracing和ZipKin基础入门与实践

【1】概述 在分布式与微服务场景下&#xff0c;我们需要解决如下问题&#xff1a; 在大规模分布式与微服务集群下&#xff0c;如何实时观测系统的整体调用链路情况。 在大规模分布式与微服务集群下&#xff0c;如何快速发现并定位到问题。 在大规模分布式与微服务集群下&…

供应商管理软件:企业挑选新供应商的5个考量

在选择新的供应商时&#xff0c;企业必须进行细致的考量&#xff0c;这一决策对于依赖外部商品的零售商尤为关键。一段成功的合作伙伴关系不仅能够促进销售增长&#xff0c;还能提供稳定的服务支持。相反&#xff0c;失败的合作伙伴关系可能会导致客户不满、利润损失&#xff0…

一篇搞懂!LinuxCentos中部署KVM虚拟化平台(文字+图片)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f468;‍&#x1f4bb;Linux高级管理专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月28日15点11分 &#x1f004;️文章质量&#xff1a;94分 目录 ————前言———— KVM的优点 KVM…

机器人控制系列教程之Delta机器人运动学分析(2)

基于MATLAB的Delta机器人正向运动学模型求解 我们在上一篇推文 中&#xff0c;推导了Delta机器人的正向运动学&#xff0c;简单来说&#xff0c;就是我们可以通过机器人的末端位姿求解出对应的关节空间的角度&#xff08;位置&#xff09;。 最终我们分析该机器人的空间位置结…

服务器数据恢复—raid5阵列硬盘出现大量坏道的数据恢复案例

服务器存储数据恢复环境&故障&#xff1a; 一台DELL EqualLogic PS 4000存储中有一组由12块磁盘组建的raid5阵列&#xff0c;存储空间划分3个同等大小的卷&#xff0c;采用的VMFS文件系统。 两块硬盘指示灯亮黄色&#xff0c;raid5阵列崩溃&#xff0c;存储变得不可用。 服…

C++类型转换可调用对象

目录 C的四种可视性类型转换 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast C中的可调用对象 普通函数 函数指针 仿函数 Lambda表达式 包装器function bind C的四种可视性类型转换 C语言中的类型转换是不安全、不明确的&#xff0c;于是C就出了更…

跨境业务经验推荐:三大优秀的IP代理服务商

作为一名多年从事跨境业务的老手&#xff0c;今天我要给大家介绍几款绝对靠谱的IP代理服务商&#xff0c;保证让你的全球业务更加顺畅&#xff01; 1. 711Proxy 711Proxy以其优秀的性能和覆盖范围广而著称。对于跨境电商和国际业务来说&#xff0c;快速稳定的网络连接至关重要…

115V 400HZ远机位电源车在国际机场的推广与应用

随着我国航空业的快速发展&#xff0c;对于远机位电源车的需求也越来越迫切。远机位电源车可以为飞机提供稳定、可靠的电力&#xff0c;确保飞机在停机、起降、航行等环节中正常运行。在当前的航空技术中&#xff0c;115V 400HZ 远机位电源车技术发展及其在航空领域的应用逐年增…

把 AI 人机炼成高玩,游戏 AI 技术实践指南,码住!

今天&#xff0c;为大家深入浅出地讲明白上亚运的经典 IP《梦三国 2》&#xff0c;到底应用了哪些来自网易数智的 AI 黑科技。看完你就会觉得&#xff1a;原来做 AI&#xff0c;我也行&#xff01; 方案概述 游戏作为 AI 落地最佳的试验田&#xff0c;近年来已经产生了多个极具…

计算机系统基础(二)

1.数值数据的表示 为什么采用二进制&#xff1f; 二进制只有两种基本状态&#xff0c;两个物理器件就可以表示0和1二进制的编码、技术、运算规则都很简单0和1与逻辑命题的真假对应&#xff0c;方便通过逻辑门电路实现算术运算 数值数据表示的三要素 进位记数制&#xff08;十…

计算机缺少d3dcompiler_43.dll无法继续执行代码怎么修复

打开游戏或许软件程序时候&#xff0c;我们会经常遇到各式各样的问题&#xff0c;比如找不到d3dcompiler_43.dll无法继续执行代码就是非常常见的问题&#xff0c;今天我叫大家如何解决遇到d3dcompiler_43.dll丢失问题&#xff0c;也详细介绍d3dcompiler_43.dll文件是什么与丢失…

加油卡APP开发,汽车加油省钱新模式

随着社会生活水平的提高&#xff0c;汽车已经成为了家家户户的出行工具&#xff0c;汽车加油也就成为了居民日常出行必不可少的开销。为了让居民享受到更加便利、优惠的加油体验&#xff0c;加油卡APP由此产生&#xff0c;不仅方便了用户&#xff0c;也给汽车加油市场提供了更加…

Qt常用技巧代码分享

写在前面:首先Qt主要是面向于界面设计,界面有些布局以及用法很多,可以不会写代码,但是要知道Qt可以实现这个功能,然后一点点去寻找学习,问AI也好,百度也好都可以,总比Qt可以实现某些布局功能,但是你不知道怎么去实现这些功能要好得多。俗话说的好,可以不会,但是不能…

跨境电商新趋势:海外盲盒小程序的市场机遇

随着全球经济的深度融合和消费者需求的日益多元化&#xff0c;跨境电商作为一种新型的国际贸易模式&#xff0c;正在以前所未有的速度发展。而在这一浪潮中&#xff0c;海外盲盒小程序凭借其独特的商业模式和强大的市场潜力&#xff0c;正逐渐成为跨境电商领域的新宠。本文将探…

双目摄像头测距

Opencv双目校正函数 stereoRectify 详解 参数说明&#xff1a; 输入参数&#xff1a; cameraMatrix1&#xff1a;左目相机内参矩阵 distCoeffs1&#xff1a;左目相机畸变参数 cameraMatrix2&#xff1a;右目相机内参矩阵 distCoeffs2&#xff1a;右目相机畸变参数 imageSize&…