What is the difference between new/delete and malloc/free?

前端 未结 15 2711
春和景丽
春和景丽 2020-11-21 23:53

What is the difference between new/delete and malloc/free?

Related (duplicate?): In what cases do I use malloc vs

相关标签:
15条回答
  • 2020-11-22 00:09

    new/delete is C++, malloc/free comes from good old C.

    In C++, new calls an objects constructor and delete calls the destructor.

    malloc and free, coming from the dark ages before OO, only allocate and free the memory, without executing any code of the object.

    0 讨论(0)
  • 2020-11-22 00:12

    new calls the ctor of the object, delete call the dtor.

    malloc & free just allocate and release raw memory.

    0 讨论(0)
  • 2020-11-22 00:14

    new and delete are C++ primitives which declare a new instance of a class or delete it (thus invoking the destructor of the class for the instance).

    malloc and free are C functions and they allocate and free memory blocks (in size).

    Both use the heap to make the allocation. malloc and free are nonetheless more "low level" as they just reserve a chunk of memory space which will probably be associated with a pointer. No structures are created around that memory (unless you consider a C array to be a structure).

    0 讨论(0)
  • 2020-11-22 00:15

    new/delete

    • Allocate/release memory
      1. Memory allocated from 'Free Store'
      2. Returns a fully typed pointer.
      3. new (standard version) never returns a NULL (will throw on failure)
      4. Are called with Type-ID (compiler calculates the size)
      5. Has a version explicitly to handle arrays.
      6. Reallocating (to get more space) not handled intuitively (because of copy constructor).
      7. Whether they call malloc/free is implementation defined.
      8. Can add a new memory allocator to deal with low memory (set_new_handler)
      9. operator new/delete can be overridden legally
      10. constructor/destructor used to initialize/destroy the object

    malloc/free

    • Allocates/release memory
      1. Memory allocated from 'Heap'
      2. Returns a void*
      3. Returns NULL on failure
      4. Must specify the size required in bytes.
      5. Allocating array requires manual calculation of space.
      6. Reallocating larger chunk of memory simple (No copy constructor to worry about)
      7. They will NOT call new/delete
      8. No way to splice user code into the allocation sequence to help with low memory.
      9. malloc/free can NOT be overridden legally

    Table comparison of the features:

     Feature                  | new/delete                     | malloc/free                   
    --------------------------+--------------------------------+-------------------------------
     Memory allocated from    | 'Free Store'                   | 'Heap'                        
     Returns                  | Fully typed pointer            | void*                         
     On failure               | Throws (never returns NULL)    | Returns NULL                  
     Required size            | Calculated by compiler         | Must be specified in bytes    
     Handling arrays          | Has an explicit version        | Requires manual calculations  
     Reallocating             | Not handled intuitively        | Simple (no copy constructor)  
     Call of reverse          | Implementation defined         | No                            
     Low memory cases         | Can add a new memory allocator | Not handled by user code      
     Overridable              | Yes                            | No                            
     Use of (con-)/destructor | Yes                            | No                            
    

    Technically memory allocated by new comes from the 'Free Store' while memory allocated by malloc comes from the 'Heap'. Whether these two areas are the same is an implementation detail, which is another reason that malloc and new can not be mixed.

    0 讨论(0)
  • 2020-11-22 00:15

    There are a few things which new does that malloc doesn’t:

    1. new constructs the object by calling the constructor of that object
    2. new doesn’t require typecasting of allocated memory.
    3. It doesn’t require an amount of memory to be allocated, rather it requires a number of objects to be constructed.

    So, if you use malloc, then you need to do above things explicitly, which is not always practical. Additionally, new can be overloaded but malloc can’t be.

    In a word, if you use C++, try to use new as much as possible.

    0 讨论(0)
  • 2020-11-22 00:18

    1.new syntex is simpler than malloc()

    2.new/delete is a operator where malloc()/free() is a function.

    3.new/delete execute faster than malloc()/free() because new assemly code directly pasted by the compiler.

    4.we can change new/delete meaning in program with the help of operator overlading.

    0 讨论(0)
提交回复
热议问题