Mo2m4C;i$ZE0在用C语言开发时,特别是在服务器端,内存的使用会成为系统性能的一个瓶颈,如频繁的分配和释放内存,会不断的增加系统的内存碎片,影响内核之
后分配内存的效率,这个时候一个比较可行的做法是采用内存池,先分配好比较多的内存,然后在这个已经分配的内存里使用内存,这样就不需要内核过多的参与内
存分配和释放的过程。o/E
j”@n
hW0
51Testing软件测试 /^$GI1G
内存池根据应用不同有多种实现的策略,如有些分配很大的内存,然后将内存分配成大小相等的块,并将每个块链接起来进行管理。51Testing软件测试 (q”kXG4RU
51Testing软件测试 [-C{A5{o*J
下面对模型介绍的时候,为了简单,不加入用于调试的编写技巧和为之准备的结构,其实主要是省去间接调用,有时为了调试,会将文件及所在行以及主要的变量状态输出。51Testing软件测试 EIxW,Kq0Mi
eB4c_&W6ZEm/F0一、内存池访问接口iL7`2[z0
y.c0D2Dnd0创建大小为size的新的内存池。51Testing软件测试 QA4dEQZ!p:Ip
c+k`s)@ g”W#T0q-sW1l0pool_t _pool_new_heap(int size);
51Testing软件测试 _;X!SPGk9T*O
从指定内存池中分配大小为size的内存空间,这些空间会在内存池释放时,被自动的释放。51Testing软件测试 ixYY_,](z+]
51Testing软件测试 gO$|}} y
,bBS$[Kr f$V0void *pool_malloc(pool_t, int size);
9^)a$zDo’5C0内存池的大小,返回内存池中所有内存块的大小总和N}T,X#@r0
51Testing软件测试 AL{(iIPrz
51Testing软件测试 ;FY0P)Gl9X,Vint pool_size(pool_t p);
(sT8Kxp
yz0释放内存池,这会导致所有内存被释放,同时内存池本身也被释放gy)|$}m7W)r3e e0
51Testing软件测试 -]Y”hhPjxn
w@k)X!p2LB!cz*’E0void pool_free(pool_t p);
51Testing软件测试 u6DhX,g9d
Ck.Yx
还有其它的一些接口,但这些是主要的接口。51Testing软件测试 0s!ZX4t8`6R9c:_X
r }
8AB}%r D;aL:S0二、数据结构7P N”^.b(W#L [0
zw b j.F*}a)x0
51Testing软件测试 S@GfmX[qstruct pheap
e””XJQ&r)x+]+y0{
‘w5L5oO$M Kq(ARZ3@0 void *block;51Testing软件测试 &KJo_
F4x/q5Q!FD!K
int size
3、pheap域用于指向需要被放入链表的内存块,就是前面的结构。51Testing软件测试 6q6uER
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!