首页 > 代码库 > LWIP源码 - mem_malloc(1)

LWIP源码 - mem_malloc(1)

     本系列以V1.4.1为蓝本。

     在此版本中,内存分配分为:普通和内存池两种。

     本篇介绍普通的内存分配,所有的函数在文件mem.c(本小结介绍的是L496-L518)。

    

     1. 声明变量

         (1) 内存大小变量

mem_size_t ptr, ptr2;
               声明两个16位的无符号整型变量。

               即:

               unsigned short ptr, ptr2;


         (2) 内存链表变量

struct mem *mem, *mem2;

             结构mem的原型:

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.
 */


        2. 入参检查

           在分配内存时,我们可以指定内存大小:size;就是这个入参。

           在说明这个入参前,我们要知道,作者设置了内存对齐的默认值:4。当然,我们也可以指定为2。

           此值设置在lwipopts.h文件中。

MEM_ALIGNMENT 4

           (1) 值为0

                 不分配内存,返回空值。

           (2) 值小于最小内存对齐

                  当值小于MIN_SIZE(12,mem.c - L169)时,设置为12。

           (3) 值大于内存对齐

                 当值大于MEM_SIZE(8000,lwipots.h)时,不分配内存,返回空值(NULL)。

      

          对于进行入参的(2),(3)检测前有一个入参的再运算:

(((size) + MEM_ALIGNMENT - 1) &~(MEM_ALIGNMENT - 1))


(未完待续...)