我们在用c、c++开发的时候,经常用到系统的malloc和free函数来分配和释放内存,那有的人说,频繁的申请和释放,时间长了,会乱成内存泄露,也会影响服务器的性能。请看以下代码:
for (int i=0; i<5000000; i++)
{
void *p = malloc(10000);
if (p)
free (p);
}
这段代码以release方式编译,在配置内存6G、i5四核cpu的机子上运行,需要10秒左右的时间。
然后本人试了一下jemalloc库,用je_malloc和je_free把以上代码的函数替换掉,同样的代码,运行需要1秒钟不到!至于有没有内存泄露,是没有条件去测试的啦,如有人测试出结果,请回帖分享一下。
500万次,一次申请10kb内存,只要1秒钟不到!如果没有产生内存碎片,那是不是内存池什么的,都可以放弃了?我们可以在需要内存的时候申请,用完后再释放。
以下是jemalloc在windows下的使用方法:
1.我已经把代码上传了,请到这里下截http://download.csdn.net/detail/tzz8080/6447097
2.解压后,运行目录下的build_dll.bat,完成编译
3.把生成的dll和lib文件拷到你的工程目录下,通过以下方法把je_malloc,je_free函数导出来,其它函数的导出方法类似。
extern "C" __declspec(dllimport) void* je_malloc(size_t size);
extern "C" __declspec(dllimport) void je_free(void *ptr);
#pragma comment (lib, "jemalloc.lib")
编译工具:VC9.0