【问题标题】:Raw memory access Java/Python原始内存访问 Java/Python
【发布时间】:2013-03-11 20:29:15
【问题描述】:

内存映射硬件

在一些计算架构上,指针可以直接用于 操作内存或内存映射设备。

为指针分配地址是编程时非常有用的工具 微控制器。下面是一个简单的例子,声明一个指针 在此示例中,键入 int 并将其初始化为十六进制地址 常量 0x7FFF:

int *hardware_address = (int *)0x7FFF;

80 年代中期,使用 BIOS 访问 PC 的视频功能 很慢。显示密集型应用程序通常用于 通过转换十六进制常量直接访问 CGA 显存 0xB8000 指向一个指向 80 个无符号 16 位 int 值数组的指针。 每个值由低字节中的 ASCII 码和 高字节。因此,将字母“A”放在第 5 行第 2 列 蓝底白字,写出如下代码:

#define VID ((unsigned short (*)[80])0xB8000)

void foo() {
    VID[4][1] = 0x1F00 | 'A';
}

在没有指针的情况下,Java/Python 中是否有可能?

编辑:

这样的访问可能吗:

char* m_ptr=(char*)0x603920;
printf("\nm_ptr: %c",*m_ptr);

?

【问题讨论】:

  • 你能解释一下你想用这个做什么吗?
  • 只是阅读this

标签: java pointers reference


【解决方案1】:

我完全不确定上下文,因此您尝试做的事情是否有用,但这里是:

Java Native Interface 应该允许在进程空间内直接访问内存。同样,python can load c module 将提供访问方法。

除非您有系统加载的驱动程序来执行接口,否则任何硬件设备内存都将超出范围。即使这样,驱动程序/内核模块也必须是处理非应用程序空间内存的模块。

【讨论】:

    【解决方案2】:

    如果您使用的是带有/dev/mem 的操作系统,您可以在其上创建一个MappedByteBuffer 并执行此类操作。

    【讨论】:

    • MappedByteBuffer 上的标准 Java 文档,结合 'man mem' 或 'man proc' (for /proc/PID/mem) 的结果会告诉你你想要什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多