JIT代码生成技术

2024-03-31

虚拟机如何动态生成本机机器代码并执行它?

假设您可以弄清楚想要发出的本机机器操作码是什么,那么如何实际运行它呢?

它是否像将助记符指令映射到二进制代码,将其填充到 char* 指针中并将其转换为函数并执行一样hacky?

或者您会生成一个临时共享库(.dll 或 .so 或其他)并使用标准函数将其加载到内存中,例如LoadLibrary ?


你可以只做程序计数器 http://en.wikipedia.org/wiki/Program_counter指向您要执行的代码。请记住,数据可以是数据或代码。在 x86 上,程序计数器是 EIP 寄存器。 EIP的IP部分代表指令指针。调用JMP指令跳转到某个地址。跳转后的EIP就会包含这个地址。

它是否像将助记符指令映射到二进制代码,将其填充到 char* 指针中并将其转换为函数并执行一样hacky?

是的。这是一种方法。生成的代码将被转换为指向函数的指针 http://en.wikipedia.org/wiki/Pointer_to_function in C.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JIT代码生成技术 的相关文章

  • 如何向 Python shell 添加制表符补全?

    当使用启动 django 应用程序时python manage py shell 我得到一个 InteractiveConsole shell 我可以使用制表符完成等 Python 2 5 1 r251 54863 Apr 15 2008
  • 编写编程语言的建议? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 对于想要编写编程或脚本语言的人 您可以提供哪些建议 我 我不担心如何编程或设计编译器 而是担心如何使用工具和代码生成器快速开发编译器
  • 如何在用 C 编写的类似 FORTH 的语言解释器中实现 LOOP

    我正在用 C 编写一种简单的基于堆栈的语言 并且想知道应该如何实现某种类型的循环结构和 或前瞻符号 由于此页面的代码有点长 超过 200 行 所以我将其放入GitHub 存储库 https github com tekknolagi Sta
  • PHP 的 Perl 解释器

    我为我的新站点计划的一些功能已经作为免费 Perl 模块提供 因此 我正在考虑使用它们的可能性 而不是在 PHP 中再次编码 我本来打算用exec or system函数来调用perl脚本 这会很慢 但我遇到了一个佩克延伸 http pec
  • 如何检测 PHP JIT 是否启用

    检测 PHP 是否使用 JIT 编译并且从运行脚本启用 JIT 的最简单方法是什么 您可以通过调用直接查询opcache设置opcache get status https www php net manual en function op
  • 如何在 python 中使用 numba.jit 将计算值传递到列表排序?

    我正在尝试使用 Python 中的 numba jit 函数中的自定义键对列表进行排序 简单的自定义键可以工作 例如我知道我可以使用如下所示的绝对值进行排序 import numba numba jit nopython True def
  • 无 JIT 优化

    看一下这个问题 https stackoverflow com questions 17761515 java multiplication strange behaviour 代码 class test public static voi
  • 是否可以在 OCaml 解释器中使用箭头键?

    每次我在解释器中使用这些键时 我都会不断出现如下符号 D C 我在 ZSH 中使用 Linux Mint 12 但是在 Ubuntu 中使用 bash 得到了相同的结果 另外 ssh 中也是同样的情况 库存 OCaml 顶层没有内置行编辑功
  • 通过字典使用 numba njit 并行化来加速代码的问题

    我编写了一个代码并尝试使用 numba 来加速代码 代码的主要目标是根据条件对一些值进行分组 在这方面 iter 用于收敛代码以满足条件 下面我准备了一个小案例来重现示例代码 import numpy as np import numba
  • 注释会减慢解释语言的速度吗?

    我问这个问题是因为我使用 Python 但它也适用于其他解释语言 Ruby PHP JavaScript 每当我在代码中留下评论时 我是否会减慢解释器的速度 根据我对解释器的有限理解 它以字符串形式读取程序表达式 然后将这些字符串转换为代码
  • 如何使用 GPU 使用 tf.lite.Interpreter(在 python 中)运行 tflite 模型 (*.tflite)?

    我已根据以下说明将张量流推理图转换为 tflite 模型文件 tflite https www tensorflow org lite convert https www tensorflow org lite convert 我在我的 G
  • 行为相同的条件检查的执行[重复]

    这个问题在这里已经有答案了 我回答了这个问题 https stackoverflow com questions 25234401 which is a better practice for if else condition 25234
  • 运行JDK代码时Java JIT会作弊吗?

    我正在对一些代码进行基准测试 但我无法让它运行得像java math BigInteger https docs oracle com javase 7 docs api java math BigInteger html 即使使用完全相同
  • Trace Trees 带来的 Javascript 性能改进是否会应用到其他解释语言中?

    听起来 Mozilla 在提高 JavaScript 性能方面运气不错追踪猴子 http weblogs mozillazine org roadmap archives 2008 08 tracemonkey javascript lig
  • 在 64 位 Windows 计算机上使用 32 位 com 运行 32 位应用程序

    我有一个使用 C COM 对象的 C 应用程序 两者都构建在 32 位计算机上 现在我必须在 64 位机器上运行它们 我注册了COM对象 在计算机 hkey classes root wow6432node clsid xxx 下的寄存器中
  • PyPy 明显慢于 CPython

    我一直在测试我制作的缓存系统 其目的是加速 Django Web 应用程序 它将所有内容存储在内存中 根据 cProfile 我的测试中的大部分时间都花在 QuerySet clone 内 结果证明效率非常低 考虑到实现 这实际上并不奇怪
  • 命名空间中的特殊字符

    我正在考虑在自定义框架的命名空间中使用带有变音标记的字符 例如 这个想法是作为区分产品的一种方式而提出的 但我想确定这不是一个坏主意 如果有什么关于它的事情 稍后会回来咬我 我在搜索中没有看到使用特殊字符的名称空间的其他示例 也没有看到有关
  • Python CTRL+C 退出解释器?

    Python 2 73 Why is it on my laptop when I hit CTRL C I can exit the interpreter and on my desktop hitting CTRL C will ma
  • 有C语言的解释器吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话
  • 从 IL 创建方法的副本

    我试图在运行时使用反射创建方法的副本 我有以下代码 public static R CopyMethod

随机推荐