内存池示例






1.48/5 (7投票s)
2007年3月26日
1分钟阅读

29542

1005
内存池
引言
在 C 或 C++ 语言中进行内存分配可能需要花费大量时间,尤其是在一些高效的软件产品中。如果一个应用程序总是分配内存,那么它在长时间运行后性能会大大降低。堆会变得碎片化。
提高内存分配效率的解决方案是使用内存池。它将在应用程序启动时分配大量内存,并将其分成较小的内存缓冲区单元。每次从池中请求内存时,它都从先前分配的内存缓冲区单元中获取,而不是从操作系统获取。最大的优点是:
1. 比 C、C++ 语言中的普通内存分配(如 malloc/new 运算符)更快。
2. 堆碎片化程度非常低。
它是如何工作的?
在应用程序启动时,您将分配大量内存。这个大内存块由许多缓冲区单元组成。如果分配的缓冲区大小小于缓冲区单元大小,内存池将返回给您空闲的缓冲区单元指针。一个缓冲区单元由缓冲区单元的大小和您可以获得的缓冲区内存组成。
使用代码
//
//
size_t initSize = 1024;
//Initialize the memory buffer
BufferPool bfA(initSize,20);
//allocate memory from the memory pool
char *p = bfA.Allocate(100);
if(p)
{
//use the memory buffer
//release memory to the memory pool
bfA.Release(p);
}