Erlang操作码及其含义

10

一些Erlang虚拟机使用的opcodes具有明显的含义,但其他一些则很神秘,并且它们似乎因微小差异而不同。

例如:

  1. call_extcall_ext_only操作码之间有什么区别?
  2. allocateallocate_zero操作码之间有什么区别?
  3. test_heap操作码用于什么?它是某种检查还是实际在堆中分配空间?它与元组和列表的使用有何关联?
  4. allocate的参数代表什么意思?

如果有人能够为我指出Erlang虚拟机使用的opcodes的任何可用文档,或者至少能够启示我上述问题,那将不胜感激。


请参阅http://erlangonxen.org/more/beam。 - jj1bdx
1个回答

4
相似的SO问题Erlang文档所述:
请注意,汇编文件的格式未经记录,可能会在版本之间更改 - 此选项主要用于内部调试。
如果你真的想知道发生了什么,似乎必须在源代码中跟踪它。大部分工作是在erts / emulator / beam / beam_emu.c中完成的(我已经查看过otp_src_R15B02):
1. call_ext:将续线指针设置为当前指令+2并分配/调用外部。call_ext_only:不要触摸CP,只需分派。 (〜第1520行) 2. 两者都分配内存,但allocate_zero也将其初始化为0x00(〜第334行)。 3. test_heap:检查堆中是否有Nh个字可用;如果没有,则进行垃圾回收。 (〜第390行) 4. allocate(StackNeeded,NumberOfRegistersToPreserve)(〜第316行)
整个文件是#define和goto的复合体,一些宏在同一文件夹的ops.tab中定义。我也不是erlang-asm专家,可能会错过一些东西。请记住这一点,在开始使用它们之前交叉检查我的陈述。
引用来自链接SO-awnser的TamasNagy:
我不确定你想通过这个实现什么,但是核心erlang可能是进行代码操作的更好级别。
请在那里查找更多信息。 Erlang有其优势,但文档不是其中之一。
问候。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接