在各種記憶體分配演算法中,有一種很實用,實現起來也簡單:定長的記憶體分配器。即每次分配的記憶體大小是固定的。
大概邏輯是:
在一些區域性的單執行緒邏輯中,可以有效提高效率。
**很短,很容易看懂:
fallocator.h
#pragma once
/** * 固定長度的記憶體分配器
*/#include #include #include // 記憶體項
typedef struct blockitem blockitem_t;
// 記憶體塊
typedef struct memblock memblock_t;
// 分配器
typedef struct fallocator fallocator_t;
// 初始化分配器: blocksize為記憶體塊的長度,itemsize為分配項的大小
void fallocator_init(fallocator_t *alloc, uint32_t blocksize, uint32_t itemsize);
// 釋放分配器
void fallocator_free(fallocator_t *alloc);
// 建立記憶體項
void* fallocator_newitem(fallocator_t *alloc);
// 釋放記憶體項
bool fallocator_freeitem(fallocator_t *alloc, void *item);
// 判斷記憶體項是否已經釋放
bool fallocator_isfree(fallocator_t *alloc, void *item);
fallocator.c
#include "fallocator.h"
#include #include #include #define max_block_size 16*1024
#define min_block_size 4096
#define min_item_size sizeof(blockitem_t)
#define min(a, b) ((a) > (b) ? (b) : (a))
#define max(a, b) ((a) > (b) ? (a) : (b))
#define clamp(v, mi, ma) max(min(v, ma), mi)
#define free_flag 0xc0c0c0c0
void fallocator_init(fallocator_t *alloc, uint32_t blocksize, uint32_t itemsize)
void fallocator_free(fallocator_t *alloc)
}void* fallocator_newitem(fallocator_t *alloc)
}blockitem_t *item = alloc->freeitem;
alloc->freeitem = alloc->freeitem->next;
return item;
}bool fallocator_freeitem(fallocator_t *alloc, void *item)
bool fallocator_isfree(fallocator_t *alloc, void *item)
下面是乙個測試程式:
#include #include "fallocator.h"
typedef struct myitem myitem_t;
static myitem_t* items[1000];
int main(int argc, char const *ar**)
for (i = 0; i < 500; ++i)
}for (i = 0; i < c; ++i)
fallocator_free(&alloc);
return 0;
}
記憶體分配器一
glibc記憶體管理學習 x86平台linux程序記憶體布局 text elf格式程式 data 程式執行時就能確定的資料,可讀可寫 bss 沒有初始化的全域性變數和靜態表裡 heap stack 由編譯器自動分配釋放,存放函式引數 區域性變數等 mmap 對映區域 實現乙個malloc 分頁與位址...
(六)記憶體分配器
c 的stl中定義了很多容器,容器的第二個模板引數通常為allocator型別。標準庫中allocator類定義在標頭檔案memory中,用於幫助將記憶體分配和物件的構造分離開來。它分配的記憶體是原始的 未構造的。allocatoralloc 定義了乙個可以分配string的allocator物件 ...
Halloc記憶體分配器
max nsbs 8192 預設的最大superblocks數量 sb set sz max nsbs word sz superblock set的大小,每個set32個superblcoks free mem g 裝置上釋放的總記憶體 max alloc mem g 可以被分配的最大記憶體 to...