任意大小 内存池 c语言,C语言内存池使用模型-1 – Mr.南柯 – 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园…

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

来源:U6E#f.L

3、pheap域用于指向需要被放入链表的内存块,就是前面的结构。51Testing软件测试网6q6uER

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月15日
下一篇 2021年4月15日

相关推荐