为嵌入式系统开发一套内存管理机制

公司的项目都没有自己的内存管理机制,要使用内存时就malloc,不用时就free,感觉有效率问题,而且有内存泄漏的隐患,因此我决定设计一套给嵌入式linux设备使用的内存管理机制(很大部分参考了某开源web服务器中的设计)。

 

设计思想综述

用Alloc结构体表示一个内存块,内存块的大小有13个等级,每个等级分别是:

16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536字节。

 #define MAX_CLASS 13
typedef struct Alloc {
    union {
        void    *next;                          /**< Pointer to next in q */
        int     size;                             /**< Actual requested size */
    } u;
    int         flags;                          /**< Per block allocation flags */

} Alloc;

上面的结构体中有个指针next,用于将所有相同大小的内存块串成链表。

13种大小的内存块,就意味着有13条链表,链表首元素存放在全局数组中:

static Alloc    *qhead[MAX_CLASS];             /* Per class block q head */

对于大小在64k以内的内存需求,均到我们预先分配的内存块去取,除非内存块没有空闲了。

64k以上的内存需求,直接用malloc分配。

实际实现:

 #define MAX_CLASS 

你可能感兴趣的:(嵌入式linux,进阶)