写点什么

risc-v 怎么使用内存呢?

作者:高端章鱼哥
  • 2024-06-28
    福建
  • 本文字数:1130 字

    阅读完需:约 4 分钟

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 = 0x1FFF0x1FFF & 0xFFFFF000 = 0x1000(保持不变)

对于未对齐的地址,例如 0x1003:0x1003 + 0xFFF = 0x20020x2002 & 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 可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

感谢阅读本文

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

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
risc-v 怎么使用内存呢?_高端章鱼哥_InfoQ写作社区