▌第一次閱讀本系列的,可以先看:


▌第一次閱讀垃圾回收器系列,可以先看:


▌前言提要:

有這幾個函數:
void free_all_register_address(void);               // 釋放
void register_address(void *address);               // 標記
void new_1d(void **ptr, int length, int type_side); // 分配
分別進行釋放標記分配的工作。
還有用於紀錄地址全域變數
void **address_pool = NULL;  //將會是一個動態陣列,儲存 void*
int index = 0; //索引,指向目前可以儲存地址的空間

標記分配在前兩篇文章已經進行了初步的構思完善
詳細的部分可以回去看。
所以今天要完善的是用於釋放所有被標記地址的函數,
即 free_all_register_address 。

▌完善釋放所有被標記地址的函數:

假設所有需要釋放的地址已經經 register_address() 函數註冊、標記,
所以要釋放所有被標記地址只需要遍歷一次 address_pool

▌粗略估計 free_all_register_address 的結構:

void free_all_register_address(void) {

 /*遍歷 address_pool 的空間*/
 for (int i = 0; i < index; i++) {
  free(address_pool[i]);  //釋放曾經記錄過的記憶體地址的空間
  address_pool[i] = NULL;
 }

    /*釋放用於紀錄的空間*/
 free(address_pool);
 address_pool = NULL;
}
很簡單,兩個部分,
就是遍歷 address_pool ,釋放。
再釋放用於記錄的空間。
釋放後設為 NULL 是為了安全,原因不多說。

最核心基礎的三個部分已經完成,明天來進行測試程式。