我想映射一部分進程內存作爲字節數組。 如何做到這一點?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