php 記憶體管理

來源:互聯網
上載者:User

左側為資料結構中的

heap->free_buckets[ZEND_MM_NUM_BUCKETS*2];

右側是segment,每次分配256個位元組+segment結構+zend_mm_block_info結構(segment結構能夠明確找到向作業系統申請記憶體後的指標,並有鏈表結構進行串聯
heap->segments_list = segment)
zend_mm_block_info結構明確說明這個塊用到的實際大小以及前一個塊的大小,並且有標記標註上一個塊的狀態(
ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, true_size);new_free_block = (zend_mm_free_block *) ZEND_MM_BLOCK_AT(best_fit, true_size);ZEND_MM_BLOCK(new_free_block, ZEND_MM_FREE_BLOCK, remaining_size);

segment連續記憶體,當申請size大小的記憶體時,就相當於佔用zend_mm_block_info + size 大小(zend_mm_block_info上面解釋了)

然後左側鏈表會指向segment中free的塊的位置,並通過zend_mm_free_block結構串聯起來。當已經用過的記憶體,就對連續的這塊記憶體進行指標移位(
ZEND_MM_BLOCK_AT(b, _size)->info._prev = (type) | _size; \)。
其中small_block數組根據剩餘記憶體塊大小的模分配了數組,這樣便於請求記憶體時,根據具體的index去擷取響應的記憶體塊
其中zend_mm_free_block *cache[ZEND_MM_NUM_BUCKETS];
當釋放一個block時會加入到該數組中,然後再申請記憶體時可以考慮先從cache拿資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.