# 内存管理

TIP

  • MadMemory.h
  • MadMemory.c

# madMemInit

void madMemInit(MadVptr heap_head, MadSize_t heap_size)
1

指定内存堆的可用区域。该函数由内核初始化时自动调用,使用者不可调用。

参数名 方向 说明
heap_head in 堆首地址
heap_size in 堆大小(以字节为单位)

# madMemMallocCarefully

MadVptr madMemMallocCarefully(MadSize_t n, MadSize_t *nReal)
1

分配一块动态内存。

参数名 方向 说明
n in 欲分配内存的大小(以字节为单位)
nReal out 返回实际分配的内存大小(0则忽略)
返回值 说明
0 失败
NZ 成功(内存块首地址)

TIP

  • 若空间足够,malloc(0) 会返回一个有效指针。

# madMemCalloc

MadVptr madMemCalloc(MadSize_t n, MadSize_t size)
1

分配一块由 n 个尺寸为 size 的连续内存块组成的动态内存。

参数名 方向 说明
n in 连续内存块的数量
size in 连续内存块的尺寸
返回值 说明
0 失败
NZ 成功(内存块首地址)

# madMemRealloc

MadVptr madMemRealloc(MadVptr p, MadSize_t size)
1

基于现有内存块 p,重新分配一块尺寸为 size 的新内存块。

参数名 方向 说明
p in 原内存块
size in 新内存块尺寸
返回值 说明
0 失败
NZ 成功(内存块首地址)

TIP

  • realloc 调用失败时并不会释放p
  • size 为0,realloc 会释放p,并返回NULL

# madMemFree

void madMemFree(MadVptr p)
1

回收 p 指向的内存块。

参数名 方向 说明
p in 欲回收的内存块首地址

# madMemUnusedSize

MadSize_t madMemUnusedSize(void)
1

获取可用内存总数。

返回值 说明
x 可用内存尺寸

# madMemMaxSize

MadSize_t madMemMaxSize(void)
1

获取最大内存堆尺寸。

返回值 说明
x 最大内存堆尺寸

# madMemCpy

void madMemCpy(MadVptr dst, const MadVptr src, MadSize_t len)
1

数据复制。

参数名 方向 说明
dst in 目标数据首地址
src in 源数据首地址
len in 数据长度(以字节为单位)

# madMemSet

void madMemSet(MadVptr dst, MadU8 value, MadSize_t len)
1

数据设置。

参数名 方向 说明
dst in 目标数据首地址
value in 欲设置的值
len in 数据长度(以字节为单位)

# madMemCmp

void madMemCmp(MadVptr dst, const MadVptr src, MadSize_t len)
1

数据比较。

参数名 方向 说明
dst in 目标数据首地址
src in 源数据首地址
len in 数据长度(以字节为单位)
返回值 说明
1 dst 大于 src
0 dst 等于 src
-1 dst 小于 src

# madMemMalloc(n)

MadVptr madMemMallocCarefully(MadSize_t n, MadSize_t *nReal)
1
参数
nReal MNULL

# madMemFreeNull(p)

void madMemFree(MadVptr p);
1

内存释放后将p置0。