本系列以V1.4.1为蓝本。
在此版本中,内存分配分为:普通和内存池两种。
本篇介绍普通的内存分配,所有的函数在文件mem.c(本小结介绍的是L496-L518)。
mem_size_t ptr, ptr2;声明两个16位的无符号整型变量。
即:
unsigned short ptr, ptr2;
struct mem *mem, *mem2;
struct mem { unsigned short next; unsigned short prev; unsigned char used; }next和prev提供了向前和向后读写数据;
used为标志,1表示使用;0表示未使用;
作者在说明这个结构时,反复强调这是在堆(Heap)上进行的。
/** * The heap is made up as a list of structs of this type. * This does not have to be aligned since for getting its size, * we only use the macro SIZEOF_STRUCT_MEM, which automatically alignes. */
在分配内存时,我们可以指定内存大小:size;就是这个入参。
在说明这个入参前,我们要知道,作者设置了内存对齐的默认值:4。当然,我们也可以指定为2。
此值设置在lwipopts.h文件中。
MEM_ALIGNMENT 4
不分配内存,返回空值。
当值小于MIN_SIZE(12,mem.c - L169)时,设置为12。
当值大于MEM_SIZE(8000,lwipots.h)时,不分配内存,返回空值(NULL)。
对于进行入参的(2),(3)检测前有一个入参的再运算:
(((size) + MEM_ALIGNMENT - 1) &~(MEM_ALIGNMENT - 1))
(未完待续...)
LWIP源码 - mem_malloc(1),布布扣,bubuko.com
原文地址:http://blog.csdn.net/xiaobin_hlj80/article/details/37728119