LCC編譯器的源程式分析 67 刪除記憶體鍊錶

2021-04-14 07:50:28 字數 512 閱讀 1276

lcc的記憶體分配是使用先分配大塊記憶體,然後再從大塊記憶體裡分配出來小塊記憶體,這樣減少呼叫

malloc

的次數,當然也就減少呼叫函式

free

釋放記憶體的次數,以便提高

lcc的記憶體管理的效能。有網友對這個看不懂,我現在就把釋放記憶體函式分析如下:

#001 //

#002 //

刪除記憶體鍊錶

. #003 //

#004 //

蔡軍生深圳

#005 //

#006 void deallocate(unsigned a)

#007 

freeblocks

是儲存所有空閒記憶體的頭指標。

arena[a]

是儲存不同的記憶體鍊錶的尾指標。

first[a]

是儲存不同的記憶體鍊錶的頭指標。

LCC編譯器的源程式分析 12 13

語法分析是比較複雜的處理,下面再來分析乙個例子,它的 如下 typedef unsigned short wchar t typedef wchar t wint t 第一句語句在lcc裡的處理,前面已經解釋清楚,主要生成wchar t儲存符號表裡,並且記錄這個id的型別屬性。那麼第二句是怎麼樣通過...

LCC編譯器的源程式分析 18 19

lcc編譯器的源程式分析 19 全域性函式的定義 函式定義funcdefn處理裡,已經準備好呼叫引數和引數返回,接著就是呼叫全域性函式宣告來處理。如下面的 132 宣告函式。133 cfunc dclglobal sclass,id,ty,pt 134 上面的 是處理函式全域性定義。現在就去就分析d...

LCC編譯器的源程式分析 67 刪除記憶體鍊錶

lcc的記憶體分配是使用先分配大塊記憶體,然後再從大塊記憶體裡分配出來小塊記憶體,這樣減少呼叫 malloc 的次數,當然也就減少呼叫函式 free 釋放記憶體的次數,以便提高 lcc的記憶體管理的效能。有對這個看不懂,我現在就把釋放記憶體函式分析如下 001 002 刪除記憶體鍊錶 003 004...