c/c++ 的内存分配(通过malloc或new)可能很耗时。
更糟糕的是,随着时间的流逝,内存(memory)将形成碎片,
所以一个应用程序的运行会越来越慢,当它运行了很长时间和/或执行了很多内存分配释放操作的时候。
特别是,你频繁的申请很小的一块内存,堆(heap)会变成碎片的。
解决方案:你自己的内存池
一个(可能的)解决方法是内存池(Memory Pool)。
在启动的时候,一个”内存池”(Memory Pool)分配一块很大的内存,并将会将这个大块(block)分成较小的块(smaller chunks)。每次你从内存池申请内存空间时,它会从先前已经分配的块(chunks)中得到,而不是从操作系统。最大的优势在于:
l 非常少(几没有) 堆碎片
l 比通常的内存申请/释放(比如通过
malloc
, new等)的方式快另外,你可以得到以下好处:
l 检查任何一个指针是否在内存池里
l 写一个”堆转储(Heap-Dump)”到你的硬盘(对事后的调试非常有用)
l 某种”内存泄漏检测(memory-leak detection)”:当你没有释放所有以前分配的内存时,内存池(Memory Pool)会抛出一个断言(assertion).