os_memory.h 源码
2026/7/20大约 2 分钟源码参考内核内存管理头文件
os_memory.h — 内存管理接口头文件
源文件路径: kernel/include/os_memory.h
引用章节: 4.4 内存管理
完整源码
#ifndef __OS_MEMORY_H__
#define __OS_MEMORY_H__
#include <oneos_config.h>
#include <os_types.h>
#include <os_sem.h>
#include <os_spinlock.h>
#include <os_dummy.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef OS_USING_HEAP
#ifndef OS_USING_SEMAPHORE
#error "Macro OS_USING_SEMAPHORE must be set."
#endif
#if !defined(OS_USING_ALG_FIRSTFIT) && !defined(OS_USING_ALG_BUDDY)
#error "ERROR! At least one memory algorithm must be choose."
#endif
/* 内存统计信息 */
struct os_meminfo
{
os_size_t mem_total;
os_size_t mem_used;
os_size_t mem_maxused;
};
typedef struct os_meminfo os_meminfo_t;
/* ==================== 默认堆 API ==================== */
extern void os_default_heap_init(void);
extern os_err_t os_default_heap_add(void *start_addr, os_size_t size, enum os_mem_alg alg);
extern void *os_malloc(os_size_t size);
extern void *os_aligned_malloc(os_size_t align, os_size_t size);
extern void os_free(void *ptr);
extern void *os_realloc(void *ptr, os_size_t size);
extern void *os_calloc(os_size_t count, os_size_t size);
extern void os_default_heap_info(os_meminfo_t *info);
extern os_err_t os_default_heap_check(void);
#ifdef OS_USING_MEM_TRACE
extern os_err_t os_default_heap_trace(void);
#endif
/* ==================== 多堆 API ==================== */
typedef struct dummy_heap os_heap_dummy_t;
typedef os_heap_dummy_t *os_heap_id;
#define OS_HEAP_DEFINE(name) os_heap_dummy_t name
extern os_heap_id os_heap_init(os_heap_dummy_t *heap_cb, const char *name);
extern os_err_t os_heap_add(os_heap_id heap_id, void *start_addr, os_size_t size,
enum os_mem_alg alg);
extern void *os_heap_alloc(os_heap_id heap_id, os_size_t size);
extern void *os_heap_aligned_alloc(os_heap_id heap_id, os_size_t align, os_size_t size);
extern void *os_heap_realloc(os_heap_id heap_id, void *ptr, os_size_t size);
extern void os_heap_free(os_heap_id heap_id, void *ptr);
extern void os_heap_info(os_heap_id heap_id, os_meminfo_t *info);
extern os_err_t os_heap_check(os_heap_id heap_id);
#ifdef OS_USING_MEM_TRACE
extern os_err_t os_heap_trace(os_heap_id heap_id);
#endif
#endif /* end of OS_USING_HEAP */
/* ==================== 内存池 API ==================== */
#ifdef OS_USING_MEM_POOL
#ifdef OS_USING_MEMPOOL_CHECK_TAG
#define OS_MEMPOOL_BLK_HEAD_SIZE 4
#else
#define OS_MEMPOOL_BLK_HEAD_SIZE 0
#endif
#define OS_MEMPOOL_SIZE(block_count, block_size) \
((OS_ALIGN_UP(block_size + OS_MEMPOOL_BLK_HEAD_SIZE, OS_ALIGN_SIZE)) * block_count)
typedef struct dummy_mempool os_mempool_dummy_t;
typedef os_mempool_dummy_t *os_mempool_id;
#define OS_MEM_POOL_DEFINE(name) os_mempool_dummy_t name
struct os_mpinfo
{
os_size_t blk_size;
os_size_t blk_total_num;
os_size_t blk_free_num;
};
typedef struct os_mpinfo os_mpinfo_t;
extern os_mempool_id
os_mempool_init(os_mempool_dummy_t *mempool_cb, const char *name, void *start,
os_size_t size, os_size_t blk_size);
extern os_err_t os_mempool_deinit(os_mempool_id mempool_id);
extern void *os_mempool_alloc(os_mempool_id mempool_id, os_tick_t timeout);
extern void os_mempool_free(os_mempool_id mempool_id, void *mem);
extern void os_mempool_info(os_mempool_id mempool_id, os_mpinfo_t *info);
#endif /* end of OS_USING_MEM_POOL */
#ifdef __cplusplus
}
#endif
#endif /* __OS_MEMORY_H__ */关键说明
| 模块 | 核心 API | 说明 |
|---|---|---|
| 默认堆 | os_malloc/os_free/os_realloc/os_calloc | 与 C 标准库风格一致,零学习成本 |
| 多堆 | os_heap_init/os_heap_alloc/os_heap_free | 支持多个独立堆实例,不同内存区域独立管理 |
| 内存池 | os_mempool_init/os_mempool_alloc/os_mempool_free | 固定大小块,O(1) 分配/释放,无碎片 |
| 算法 | OS_USING_ALG_FIRSTFIT / OS_USING_ALG_BUDDY | 至少选一种,编译期检查 |