<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 編譯型語言和解釋型語言 - 編譯型語言:執行前需要經歷編譯過程,把源代碼編譯成機器語言。以后再要運行時,直接使用編譯好的文件即可。(c, c++...) 優缺點:(1):一次性編譯成平臺相關的機器語言文件,運行時脫離開發環境,運行效率高 (2):于特定平臺相關,可移植性差。 - 解釋下語言:使用專門的解釋器對源碼卓條解釋成中間語言,再將中間語言文件交給其他過程處理或直接交給機器執行。對于常見的編譯步驟分為:詞法分析->語法分析->代碼優化和字節生成。 如php執行經過:將PHP代碼經過詞法分析轉換成語言片段(Tokens)->將Tokens經過語法分析轉換成有意義的表達式(AST抽象語法樹)->再將抽象語法樹經過編譯過程編譯成opcodes(這就是中間語言)->順次的執行opcodes(物理機器無法識別opcodes,因此需要zend虛擬機) ![](https://img.kancloud.cn/0d/c0/0dc0362d2d4672da8340cc2d1e6b159f_872x489.png) ### php執行過程 1. Scanning(Lexing)對PHP源碼進行詞法分析,將源代碼切割為多個字符串單元,分割后的字符串成為Token 2. Parsing 將Token進行語法分析,轉換成抽象語法樹(AST) 3. Compilation AST經過編譯器編譯成機器指令(PHP定義的一組指令表示,每個指令對應響應的處理函數),這些機器指令為Opcodes。(這里說的編譯器不同與編譯型語言中的編譯器,AST經過編譯器被編譯成能被解釋執行的指令,而不是匯編代碼) 4. Execution zend虛擬機依次執行Opcodes,這個執行過程就是找到指令對應的處理函數,執行其中的代碼 ![](https://img.kancloud.cn/04/c9/04c9c60ff8a48c05862047506c669dc5_794x363.png) > 現在的php可以將Opcodes緩存住,從而不必每次執行前3步,除非PHP檢測到代碼發生了改變。從而很大程度上提高了PHP的執行效率。在php.ini配置文件中可以開啟或者關閉Opcodes緩存`opcache.enable=1` ### 指令 Zend虛擬機的指令稱為opline,每條指令對應一個opcode.PHP代碼在編譯后生成opline,Zend虛擬機根據不同的opline完成PHP代碼的執行,opline由操作指令,操作數和返回值組成,與機器指令非常類似. opline對應的結構體 ``` struct _zend_op { handler, // 操作執行的函數 op1, // 操作數1 op2, // 操作數2 result, // 返回值 } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看