1 解决问题
对于服务器而言,当epoll_wait检查io事件是否就绪后,然后recv接收数据写入buffer,对于buffer如果采用在栈上处理;会出现如果耗时,一次性没有处理完或者想将buffer传给单独的线程或线程池处理。就无法实现,就需要在堆上处理。
若无内存池,每次开辟都需要malloc系统调用;内存池就是程序中的只要是在堆上的空间全部统一管理。
应用场景:主要用于数据频繁的需要分配的地方
2 内存池原理
1 进程与虚拟内存的关系
每个进程都有一个对应的虚拟内存,和真实的物理内存一样大都是4G.
2 内存碎片产生原因:
在堆上分配空间比如按照顺序分配512,64,512;此时释放64字节,此时64就是内存碎片了,当在分配大于64字节的空间的时候,之前释放的就无法使用。空间的分配时间和顺序不固定会产生内存碎片。
3 内存池定义:
专门针对小块频繁分配释放空间进行管理。将小块合并成大块管理。如一次分配4