【发布时间】:2017-06-08 04:55:45
【问题描述】:
我的要求是模拟旧的摩托罗拉内存控制器。
基本上,控制器将 8 x 8Kbyte 内存块映射到 64Kbyte 地址空间,以供 CPU 后续访问。控制器最多可以访问 1024 个这样的 8K 块。
目前我已经通过使用像这样的大型平面数组来实现这一点:
unsigned char Memory[1024][8192];
int MappedMemoryBank[8];
short int Address;
然后要访问任何特定的内存地址,我使用类似这样的东西
unsigned char aByte = Memory[MappedMemoryBank[Address>>13]][Address&0x1FFF];
这很好用,但由于内存引用占处理时间的 99%,因此效率非常低。
是否有一种内存映射机制,我可以分配一定数量 (1024) 的内存块,然后将它们(以任何顺序)映射到连续的内存空间中?
这将减少我对以下内容的记忆引用:
unsigned char *Memory;
Memory = pointed to first byte of (re-)mapped memory
unsigned char aByte = Memory[Address];
这会快一个数量级(我希望)
适用于 Windows 和/或 Linux 的解决方案都可以。
【问题讨论】:
标签: c++ c linux windows memory-management