原创 laravel框架目錄

原创 php源碼學習 數組變量

一、hashArray vs packedArray $arr1 是packed arrray 本身就是有順序的 $arr2 是hash array需要做散列來保證數組的存取順序 $arr1 = []; for ($i = 0; $

原创 VirtualBox上虛擬機網絡配置並且使用iTerm ssh登錄

網絡小白,記錄網絡配置過程。 環境:mac+virtualbox6.0.8+centos7 一、創建網卡 打開VirtualBox,左上角=>管理=>主機網絡管理器=>創建網卡,手動配置   以下兩種配置都可以保證主宿機互動網絡,和虛擬機

原创 redis源碼學習d1 基本知識和sds

一、pika pika是360奇虎公司開源的一款類redis存儲系統,主要解決的是用戶使用 Redis 的內存大小超過 50G、80G 等等這樣的情況,會遇到啓動恢復時間長,一主多從代價大,硬件成本貴,緩衝區容易寫滿等問題。 Pika 就

原创 php源碼學習d12 AST的遍歷1

1.php代碼先轉化成抽象語法樹,要執行還需要將抽象語法書轉化操作指令集。 2.指令結構_zend_op struct _zend_op { const void *handler; //操作方式 znode_op op1; //

原创 php源碼學習d14 宏替換

1.宏替換 #define 宏名 字符串 #define 宏名(形參列表)字符串 2.宏展開注意事項: 1)每次宏展開的結果會被重複掃描,直到沒有任何可展開的宏爲止 2)每展開一個宏,都會記住這次展開,在這個宏展開的結果及其後續展開中,不

原创 php源碼學習d11 AST抽象語法樹

1.樹的基本知識回顧 中:左跟右 前:跟左右 後:左右跟 遍歷數可採用 遞歸,壓棧,隊列(層次遍歷)等方式 2.抽象語法樹結構源碼 enum _zend_ast_kind { /* special nodes */ ZEND_AS

原创 php源碼學習d10 詞法分析

1.詞法分析 將代碼解析成token數組,查看token數組的方法 token_get_all() $tokens = token_get_all('<?php $a = 1; echo $a; ?>'); foreach ($toke

原创 php源碼學習d9 垃圾回收初探

1.引用計數  對於循環引用,unset後應用計數2-1>0,放入垃圾回收器。計數達到10000開始垃圾回收。 垃圾回收: // $i >10000 時內存回收 $a = []; for($i = 0; $i < 10000; $i++

原创 php源碼學習d8 知識回顧補充

1.驗證當前電腦執行malloc申請內存方式   #include<stdio.h> #include<mallic.h> int main() { void* ptr = malloc(8); return 1; }

原创 php源碼學習d2 結構體聯合體

一、結構體,以最大單位對齊 // 大小和順序有關 struct s{ char a; //1 int b; //4 long c; //8 void* d; //8

原创 php源碼學習d1 內存管理

一、PHP內存相關函數 void *ptr=_emalloc(size); // 申請 _efree(ptr); // 釋放,釋放的是沒有傳入大小 二、內存基本概念 chunk(倉庫):2m大小的內存,一個chunk看分爲512個page

原创 php源碼學習d3 加法

1.整型相加溢出問題 $a = 18446744073709551616; // 2的64次方 var_dump($a+1); 輸出結果:結果成double了   2.PHP源碼中對+的處理 ZEND_API int ZEND_FAS

原创 php源碼學習d7 字符串引用

一、引用不回收    結論:變量類型一旦成引用,不會回收,一直存在,直到unset或代碼運行完畢 $a = 3; // $a type 4 圖1 echo $a; $b = &$a; //$b type 10 $a type 10 圖1

原创 php源碼學習d6 字符串2

1.柔性數組 struct _zend_string { zend_refcounted_h gc; /* 垃圾回收 */ zend_ulong h; /* hash value */ size_t len; // 存長度,內存佔