https://wenfh2020.com/2020/07/30/jemalloc/
jemalloc
是一个优秀的内存分配器,通过与系统默认的内存分配器进行比较:jemalloc 内存分配性能比系统默认的分配器快 50%。
1 |
brew install jemalloc
|
1 2 |
yum install jemalloc
yum install jemalloc-devel
|
测试 10,000,000 次,随机大小的内存块分配和回收,查看它们的工作效率。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <iostream>
#ifdef USE_JEMALLOC
#include <jemalloc/jemalloc.h>
#endif
#define MALLOC_CNT 10000000
long long mstime() {
long long mst;
struct timeval tv;
gettimeofday(&tv, NULL);
mst = ((long long)tv.tv_sec) * 1000;
mst += tv.tv_usec / 1000;
return mst;
}
int main() {
srand((unsigned)time(NULL));
long long begin = mstime();
for (int i = 0; i < MALLOC_CNT; i++) {
int size = 1024 * 4 + rand() % 1024;
char* p = (char*)malloc(size);
memset(p, rand() % 128, size);
free(p);
}
long long end = mstime();
std::cout << "begin: " << begin << std::endl
<< "end: " << end << std::endl
<< "val: " << end - begin << std::endl;
return 0;
}
|
测试时间单位:微秒,jemalloc 内存管理耗时大约是系统默认内存管理的一半 (605 vs 1253)。demo 只是对 大于 4 * 1024 比较大块的内存进行测试,对于小内存的测试,jemalloc 表现还更加优秀。
有兴趣的朋友,也可以测试一下 jemalloc 对 C++ 的 new 和 delete 的影响。
1 2 3 4 5 6 7 8 9 10 11 |
# normal mem test.
$ g++ -std='c++11' -g test_jemalloc.cpp -o tjemalloc && ./tjemalloc
begin: 1596078974122
end: 1596078975375
val: 1253
# jemalloc mem test.
$ g++ -std='c++11' -g test_jemalloc.cpp -o tjemalloc -DUSE_JEMALLOC -ljemalloc && ./tjemalloc
begin: 1596078980303
end: 1596078980908
val: 605
|