编译函数存储在哪里?

时间:2018-08-19 01:49:59

标签: php c internals php-internals

我试图了解PHP在内部如何工作。我写了一个zend扩展名,绕行了“ zend_compile_file”,然后转储了返回的zend_op_array *。我想我了解大多数正在发生的事情,但是我还不了解编译后的函数操作码将驻留在此结构中的什么位置。比如说我编译了这个文件:

<?php
function test($a, $b) {
    return $a + $b;
}

echo test(5, 10);
?>

然后转储的操作码如下:

opcode             op1        op2        return
------------------------------------------------
ZEND_INIT_FCALL    UNUSED     "test"     UNUSED
ZEND_SEND_VAL      5          UNUSED     UNUSED
ZEND_SEND_VAL      10         UNUSED     UNUSED
ZEND_DO_UCALL      UNUSED     UNUSED     ~0
ZEND_ECHO          ~0         UNUSED     UNUSED
ZEND_RETURN        1          UNUSED     UNUSED

这很容易理解:它使用参数5和10调用函数“ test”,将结果放入临时变量〜0,然后使用该变量调用echo。

我的问题:“测试”在哪里编译?它的操作码在哪里?

0 个答案:

没有答案