关于tcmalloc\malloc和new

简介:

  最近在测试tcmalloc性能的时候发现了一个现象!!!!就是new似乎很消耗性能!!直接上代码!


#include "time.h"
#include <gperftools/tcmalloc.h>
using namespace std;
 
 
#define MAX_SIZE 500000
 
//MsgDuplex _msg_list;
 
struct MsgToPut
{
     UINT _wr_ptr;
     UINT _rd_ptr;
     UINT _length;
     CHAR _base[1024];
};
 
 
 
int main()
{
        long long int start = get_os_system_time();
 
    MessageBlock* mbs[MAX_SIZE];
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        mbs[i] = new MessageBlock(1024);
        delete mbs[i];
    }
 
    long long int end = get_os_system_time();
 
    printf("%d\n",end - start);
 
    MsgToPut* mtp[MAX_SIZE];
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        mtp[i] = (MsgToPut*)tc_malloc(sizeof(MsgToPut));
        tc_delete(mtp[i]);
    }
 
    start = get_os_system_time();
 
    printf("%d\n",start - end);
 
 
 
    return 0;
}

  MessageBlock 在博文http://www.cnblogs.com/archy_yu/archive/2012/09/07/2674909.html中有介绍!!!

 我们看下打印数据!

28
10

 既然new在执行的时候运行了构造函数,那么我们也做一个reset操作; 并且在每次mtp[i] = (MsgToPut*)tc_malloc(sizeof(MsgToPut));之后执行reset函数,但是效果影响不大,打印数据为:

28

12

new 相比malloc 和 tcmalloc要消耗性能!!!而且很客观!!!


相关文章
|
3月前
|
C语言
C语言malloc与free实现原理
malloc()的实现很简单。它首先会扫描之前由 free()所释放的空闲内存块列表,以求找到尺寸大于或等于要求的一块空闲内存。(取决于具体实现,采用的扫描策略会有所不同。例如,first-fit 或 best-fito。)如果这一内存块的尺寸正好与要求相当,就把它直接返回给调用者。如果是一块较大的内存,那么将对其进行分割,在将一块大小相当的内存返回给调用者的同时,把较小的那块空闲内存块保留在空闲列表中。 如果在空闲内存列表中根本找不到足够大的空闲内存块,那么 malloc()会调用 sbrk()以分配更多
17 0
C语言malloc与free实现原理
|
5月前
|
存储 Cloud Native Linux
malloc、free 和 new、delete 的区别
malloc、free 和 new、delete 的区别
|
6月前
|
编译器 程序员 测试技术
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
173 0
|
4月前
|
程序员 编译器 C语言
C语言动态内存管理函数(malloc、free、calloc、realloc)
开辟内存空间的⽅式有两个缺点: • 空间开辟⼤⼩固定 • 数组声明时,必须指定数组的⻓度,长度⼀旦确定了便不能调整 而实际情况是,很多时候我们所需要的空间⼤⼩只有在程序运⾏后才能知道,为此C语⾔引⼊了动态内存开辟这个概念,让程序员⾃⼰可以申请和释放内存空间,这样就显得比较灵活了。
|
6月前
|
编译器 程序员 C语言
【C语言】动态内存管理(malloc,free,calloc,realloc,柔性数组)
【C语言】动态内存管理(malloc,free,calloc,realloc,柔性数组)
|
1天前
|
程序员 编译器 C语言
C语言知识:动态内存管理(malloc free calloc realloc)
C语言知识:动态内存管理(malloc free calloc realloc)
|
1月前
|
存储 程序员 Shell
【C/C++ 内存管理函数】C语言动态内存管理大揭秘:malloc、calloc、realloc与new的对比与差异
【C/C++ 内存管理函数】C语言动态内存管理大揭秘:malloc、calloc、realloc与new的对比与差异
175 0
|
3月前
|
C语言
C语言——动态内存管理(malloc, calloc, realloc, free, 柔性数组详解)
C语言——动态内存管理(malloc, calloc, realloc, free, 柔性数组详解)
|
3月前
|
C语言 程序员
【C语言基础教程】内存的申请和释放(malloc、free、realloc、calloc)
【C语言基础教程】内存的申请和释放(malloc、free、realloc、calloc)
412 0
【C语言基础教程】内存的申请和释放(malloc、free、realloc、calloc)
|
4月前
|
监控 Java Unix
日常知识点之内存泄露定位手段(c语言hook malloc相关方式)
日常知识点之内存泄露定位手段(c语言hook malloc相关方式)
40 0