#include "c_FixedPool.h" #include #include typedef struct { int id; char name[12]; } TestObject; int main(int argc, char** argv){ printf("--- 開始執行 c_FixedPool_t 測試 ---\n"); // 建立兩個獨立的記憶體緩衝區 uint8_t block1[32]; // 約可容納 2 個 TestObject (16 bytes * 2 = 32, 考慮對齊足夠) uint8_t block2[32]; c_FixedPool_t pool; // 1. 初始化並掛載第一個區塊 c_err_t err = c_FixedPool_Init(&pool, sizeof(TestObject), block1, sizeof(block1)); assert(err == C_ERR_SUCCESS); printf("初始化成功,當前可用總數: %zu\n", pool.instanceCount); // 2. 持續分配直到第一個區塊耗盡 void* p1 = c_FixedPool_Alloc(&pool); void* p2 = c_FixedPool_Alloc(&pool); void* p3 = c_FixedPool_Alloc(&pool); // 超出 block1 的容量,應為 NULL assert(p1 != NULL); assert(p2 != NULL); assert(p3 == NULL); printf("第一階段分配完畢,池已成功耗盡 (OOM 觸發)。\n"); // 3. 動態追加第二個記憶體區塊 (AddBlock) err = c_FixedPool_AddBlock(&pool, block2, sizeof(block2)); assert(err == C_ERR_SUCCESS); printf("成功追加新區塊!當前可用總數增加。\n"); // 4. 再次分配,此時應該能成功從 block2 取得記憶體 void* p4 = c_FixedPool_Alloc(&pool); assert(p4 != NULL); assert(p4 != p1 && p4 != p2); // 5. 測試回收與重複利用 c_FixedPool_Free(&pool, p1); void* p_reuse = c_FixedPool_Alloc(&pool); assert(p_reuse == p1); // 應優先拿回剛釋放的 p1 地址 // 6. 清理 c_FixedPool_DryUp(&pool); c_FixedPool_Destroy(&pool); printf("--- c_FixedPool_t 所有測試案例通過! ---\n"); return 0; }