Search code examples
c++dynamic-memory-allocation

Are calloc/malloc faster than operator new in C++


What I want to know is that if I use calloc/malloc in a c++ program instead of operator new, does it make the memory allocation faster or it hardly matters as c++ compiler is being used to compile the program.

Edit:

I suppose it should have been taken as obvious that I am not using new operator to call the constructor. Just memory allocation like for an array.


Solution

  • With most compilers I've tested, the extra initialization carried out when you use new means that it's minutely slower than malloc (at least when dealing with simple types for which the two are at least vaguely comparable). For example:

    Test Name:   D000001                         Class Name:  Allocation
    CPU Time:        56.8  nanoseconds           plus or minus       2.84
    Wall/CPU:        1.02  ratio.                Iteration Count:  419430400
    Test Description:
     Dynamic array allocation, use and deallocation time measurement
     Dynamic array of 1000 integers
     get space on heap using malloc() and use it in a procedure on each call
    
    
    
    Test Name:   D000002                         Class Name:  Allocation
    CPU Time:         238  nanoseconds           plus or minus       11.9
    Wall/CPU:        1.03  ratio.                Iteration Count:  104857600
    Test Description:
     Dynamic array allocation, initialization, use and deallocation time measurement
    
     Dynamic array of 1000 integers
     get space on heap using malloc() and use it in a procedure on each call
    
    
    
    Test Name:   D000003                         Class Name:  Allocation
    CPU Time:        60.4  nanoseconds           plus or minus       3.02
    Wall/CPU:        1.02  ratio.                Iteration Count:  419430400
    Test Description:
     Dynamic array allocation, use and deallocation time measurement
     Dynamic array of 1000 integers
     get space on heap using NEW and use it in a procedure on each call
    
    
    
    Test Name:   D000004                         Class Name:  Allocation
    CPU Time:         249  nanoseconds           plus or minus       12.4
    Wall/CPU:        1.03  ratio.                Iteration Count:  104857600
    Test Description:
     Dynamic array allocation, initialization, use and deallocation time measurement
    
     Dynamic array of 1000 integers
     get space on heap using NEW and use it in a procedure on each call
    

    So, malloc is faster on average, but there's enough variation in speed (in both new and malloc) that an individual invocation of new might actually be faster than an individual invocation of malloc.