【问题标题】:Erlang Opcodes and their meaningErlang 操作码及其含义
【发布时间】:2023-03-13 23:15:01
【问题描述】:

Erlang VM 使用的opcodes 有一些含义很明显,但其他一些则很神秘,它们之间似乎存在细微差别。

举个例子:

  1. call_extcall_ext_only 操作码有什么区别?
  2. allocateallocate_zero 操作码有什么区别?
  3. test_heap 操作码是做什么用的?是某种检查还是实际上在堆中分配了一些空间?它在某种程度上与元组和列表的使用有关,但在哪些方面?
  4. allocate 的参数代表什么?

如果有人可以向我指出任何可用于 Erlang VM 使用的 opcodes 的文档,或者如果他至少可以就上述几点启发我,我将不胜感激。

【问题讨论】:

标签: erlang opcode opcodes


【解决方案1】:

similar SO-questionthe erlang-documentation 中所述:

请注意,汇编程序文件的格式没有记录,并且可能会在不同版本之间发生变化 - 此选项主要用于内部调试。

如果您真的想知道发生了什么,似乎您必须在源代码中追踪它。大部分工作都是在 erts/emulator/beam/beam_emu.c 中完成的(我已经查看了 otp_src_R15B02):

  1. call_ext:将continuation pointer 设置为当前指令+2 并调度/调用外部。 call_ext_only:别碰CP,直接派送。 (~第 1520 行)
  2. 两者都分配内存,但 allocate_zero 还将其初始化为 0x00(~第 334 行)。
  3. test_heap:检查堆的Nh个字是否可用;如果没有,请进行垃圾收集。 (~第 390 行)
  4. allocate(StackNeeded, NumberOfRegistersToPreserve)(~第 316 行)

整个文件是#definesgotos的复合体,一些宏定义在同一文件夹的ops.tab中。我也不是 erlang-asm 方面的专家,可能错过了一些东西。请记住这一点,并在开始使用我的陈述之前对其进行交叉检查。

从链接的 SO-awnser 引用 TamasNagy:

我不确定你想用这个实现什么,但 core erlang 可能是一个更好的代码操作级别。

请在此处查看更多信息。 Erlang 有它的优势,但文档不是其中之一。

问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 2018-07-02
    • 2016-07-14
    • 2022-01-12
    • 2016-08-25
    相关资源
    最近更新 更多