<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                PHP變量管理(銷毀,分配)是基于引用計數和寫時復制實現的 ### 引用計數 &emsp;&emsp;php垃圾回收使用來引用計數的方法,php變量由zval結構體維護,zval結構體有refcount表示有多少個變量指向這個zval容器,is_ref用于區分引用變量,當unset一個變量時,會端斷開變量到內存區域的鏈接,同時講該區域的refcount引用計數減1,當refcount為0時,被當做垃圾,釋放內存 引用計數的信息位于給具體value結構的gc中: ```c typedef struct _zend_refcounted_h { uint32_t refcount; /* reference counter 32-bit */ union { struct { ZEND_ENDIAN_LOHI_3( zend_uchar type, zend_uchar flags, /* used for strings & objects */ uint16_t gc_info) /* keeps GC root number (or 0) and color */ } v; uint32_t type_info; } u; } zend_refcounted_h; ``` note: 并不是所有的數據類型都會用到引用計數,如long、double直接都是硬拷貝,[參考](http://www.hmoore.net/nickbai/php7/363267) ### 寫時復制 &emsp;&emsp;變量復制、函數傳參時并不直接硬拷貝一份value數據,而是將refcount++,變量銷毀時將refcount--,等到refcount減為0時表示已經沒有變量引用這個value,將它銷毀;如果其中一個變量試圖更改value的內容則會重新拷貝一份value修改,同時斷開舊的指向,并且refcount-- ### 內存溢出問題 &emsp;&emsp;php5.3版本之前會有內存溢出,主要是環形引用的問題(環形引用舉個例子:數組一個元素的值復制為該數組的引用);這種問題主要出現在array,object兩種類型 gc機制:當refcount減1時,如果不為0且類型是IS_ARRAY、IS_OBJECT,則添加到回收池,當回收池滿了,會遍歷所有變量以及變量下面每一項,模擬recount減1,如果變量整個refcount為0,表示為垃圾,可以回收 ### unset函數 &emsp;&emsp;unset只是斷開一個變量到一塊內存區域的鏈接,同時將該區域的引用計數-1,內存是否回收主要看refcount是否為0 ### 參考 - 《PHP7內核剖析》 - [php7 垃圾回收機制詳解](https://segmentfault.com/a/1190000016240169)
                  <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>

                              哎呀哎呀视频在线观看