2012-07-12 20 views
1

如果我有一个特殊的硬件单元,它与一些存储在它连接到计算机和内存映射,以便它的存储 其地址范围0x55500000 - 0x555fffff如何一个I接口这个硬件单元为 我的C++程序所以动态内存分配在这个硬件单元中,而不是在我的计算机内存中? 我需要实现一个具有以下功能的类。如何将内存硬件连接到C++程序?

void * allocMemoryInMyHardware(int numberOfBytesToAllocate); 

它返回一个指向已分配内存块的指针,如果不能分配,则返回null。

+1

您必须阅读本硬件的文档。如果设备是存储器映射的,则通过写入和读取该存储器(不一定会改变设备的内部存储器状态)与其进行通信。我认为我们需要更多细节。 – 2012-07-12 07:34:36

+0

@Rafal这是一个假设的情况 – Kadiam 2012-07-12 07:43:47

+1

因此,设计一个假设的设备规格或检查一些现有的规格。尤其是,你必须根据这个单位来定义“分配”的含义。如果硬件没有操作系统,则它不提供分配内存的机制,并且您必须手动保护这段内存不被使用。 – 2012-07-12 07:49:26

回答

2

您需要编写自己的分配器。搜索互联网的示例代码并调整它。如果你有简单的要求,基本的分配器可以在2-4小时内从头开始编写。如果您的平台没有虚拟内存管理,并且代码可以直接访问您的地址范围,则此方法将起作用。否则,您需要深入了解您平台上的驱动程序开发。

典型的策略是为每个分配的单元添加标题并为空闲内存区域组织双链表。 NT堆以类似的方式工作。