我想映射一部分进程内存作为字节数组。 如何做到这一点?specyfic地址的字节数组C++
我有字节数组:
byte AmmoBytes[3]
而且我想这个数组的地址0xXXXXXXX启动; 如何做到这一点?
我想映射一部分进程内存作为字节数组。 如何做到这一点?specyfic地址的字节数组C++
我有字节数组:
byte AmmoBytes[3]
而且我想这个数组的地址0xXXXXXXX启动; 如何做到这一点?
byte (& a)[3] = *reinterpret_cast<byte (*)[3]>(0xDEADBEEF);
byte * AmmoBytes = (byte *) 0xXXXXXXXX;
这是不安全的,但你能说
byte * AmmoBytes = (byte *) 0xXXXXXXXX
一般来说,你不能可靠地做到这一点。
如果0xXXXXXXX
表示硬件地址,那么您需要编写一个设备驱动程序来获取对内存的内核访问权限。
如果这是一个正常的内存地址,那么不能保证它映射到有效的内存位置,并且很可能会导致程序崩溃。
你真的想在这里做什么?
许多简单的嵌入式系统不需要内核访问。只需将地址加载到指针就足够了。 – 2011-03-04 17:47:07
我将宣布使用恒定指针存储器:
byte * const AmmoBytes = (byte * const) 0xFFFF000;
声明指针作为常数有助于编译器检测错误,例如错误地改变指针值的替代值由指针指向。
只是为了记录,'byte(*)[3]'的类型是什么? – ThomasMcLeod 2011-03-07 20:46:37
@ThomasMcLeod:它是一个**指向3字节元素的数组**的指针。 – wilx 2011-03-07 22:18:28
所以,在这种情况下,'a'是一个3元素字节数组的引用,它绑定到内存地址0xDEADBEEF? – ThomasMcLeod 2011-03-08 02:10:30