【问题标题】:byte array at specyfic addres c++特定地址的字节数组c ++
【发布时间】:2011-03-04 13:59:32
【问题描述】:

我想将进程内存的某些部分映射为字节数组。 怎么做?

我有字节数组:

byte AmmoBytes[3]

我希望这个数组从地址 0xXXXXXXX 开始; 怎么做?

【问题讨论】:

    标签: c++ arrays memory bytearray


    【解决方案1】:
    byte (& a)[3] = *reinterpret_cast<byte (*)[3]>(0xDEADBEEF);
    

    【讨论】:

    • 仅作记录,byte (*)[3]的类型是什么?
    • @ThomasMcLeod:它是一个 指向数组的指针,由 3 字节元素组成。
    • 那么,在这种情况下,a 是对绑定到内存地址 0xDEADBEEF 的 3 元素字节数组的引用?
    【解决方案2】:
    byte * AmmoBytes = (byte *) 0xXXXXXXXX;
    

    【讨论】:

      【解决方案3】:

      这是不安全的,但你可以说

      byte * AmmoBytes = (byte *) 0xXXXXXXXX

      【讨论】:

        【解决方案4】:

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

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

        如果它是一个普通的内存地址,那么不能保证它映射到一个有效的内存位置,你很可能会崩溃你的程序。

        你真的想在这里做什么?

        【讨论】:

        • 许多简单的嵌入式系统不需要内核访问。只需将地址加载到指针中就足够了。
        【解决方案5】:

        我会使用 constant 指针声明内存:

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

        将指针声明为常量有助于编译器检测错误,例如错误地更改指针值而不是指针指向的值。

        【讨论】:

          猜你喜欢
          • 2012-09-22
          • 2016-07-26
          • 2013-02-13
          • 1970-01-01
          • 1970-01-01
          • 2020-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多