2011-03-04 20 views
1

我想映射一部分进程内存作为字节数组。 如何做到这一点?specyfic地址的字节数组C++

我有字节数组:

byte AmmoBytes[3] 

而且我想这个数组的地址0xXXXXXXX启动; 如何做到这一点?

回答

5
byte (& a)[3] = *reinterpret_cast<byte (*)[3]>(0xDEADBEEF); 
+0

只是为了记录,'byte(*)[3]'的类型是什么? – ThomasMcLeod 2011-03-07 20:46:37

+0

@ThomasMcLeod:它是一个**指向3字节元素的数组**的指针。 – wilx 2011-03-07 22:18:28

+0

所以,在这种情况下,'a'是一个3元素字节数组的引用,它绑定到内存地址0xDEADBEEF? – ThomasMcLeod 2011-03-08 02:10:30

3
byte * AmmoBytes = (byte *) 0xXXXXXXXX; 
2

这是不安全的,但你能说

byte * AmmoBytes = (byte *) 0xXXXXXXXX

0

一般来说,你不能可靠地做到这一点。

如果0xXXXXXXX表示硬件地址,那么您需要编写一个设备驱动程序来获取对内存的内核访问权限。

如果这是一个正常的内存地址,那么不能保证它映射到有效的内存位置,并且很可能会导致程序崩溃。

你真的想在这里做什么?

+0

许多简单的嵌入式系统不需要内核访问。只需将地址加载到指针就足够了。 – 2011-03-04 17:47:07

0

我将宣布使用恒定指针存储器:

byte * const AmmoBytes = (byte * const) 0xFFFF000; 

声明指针作为常数有助于编译器检测错误,例如错误地改变指针值的替代值由指针指向。