繁体   English   中英

如何 map 一个 32 位 memory 地址来自 CPU 到 Z0D69B4957F06CD818D7BF3D61980E291Z 在 Z0D61F8374D141D412F78ZB3

[英]How to map a 32 bit memory address coming from CPU to a local memory in C

所以我有一个使用队列的较小级别的缓存实现,我有一个跟踪文件,它以 CPU 生成的方式生成读取和写入流,例如。 读取位置 0x20000064(32 位地址)。 在我的 main.c 中,我使用特定维度的数组实现了一个全局 memory 来模拟 RAM memory 的行为。 但是问题是,我正在解码访问 memory 以获取缓存的标记和偏移位的 32 位地址,但数组地址索引从 0 到 1023 开始,例如对于 int array[1024]。我如何 map 这里是 32 位地址到地址,就像我希望索引从 20000000 开始,直到让我们说 30000000 而不是从 0 到 10000000。有些类似于 hash 表。

如果我正确理解您要做什么,您将希望利用大多数 memory 地址未使用的事实。 现代处理器上的地址空间是巨大的,但我怀疑您将用于您的应用程序的测试数据将使用其中的一小部分。 或许您可以先了解页面大小(例如 4096 字节),然后创建每个页面的基地址 hash 到该页面的存储数组。 然后,当您需要查找地址时,使用“address-address%page_size”计算页面基地址,在 hash 页面中查找数组,然后您想要的值位于其中的“(address%page_size)”大批。 从你的问题中说出你想要什么有点困难,但我希望这个建议能给你一些工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM