gotchacppCritical
What is the difference between new/delete and malloc/free?
Viewed 0 times
deletemallocandfreebetweenthedifferencewhatnew
Problem
What is the difference between
Related (duplicate?): In what cases do I use malloc vs new?
new/delete and malloc/free?Related (duplicate?): In what cases do I use malloc vs new?
Solution
new / delete- Allocate / release memory
- Memory allocated from 'Free Store'.
- Returns a fully typed pointer.
new(standard version) never returns aNULL(will throw on failure).
- Are called with Type-ID (compiler calculates the size).
- Has a version explicitly to handle arrays.
- Reallocating (to get more space) not handled intuitively (because of copy constructor).
- Whether they call
malloc/freeis implementation defined.
- Can add a new memory allocator to deal with low memory (
std::set_new_handler).
operator new/operator deletecan be overridden legally.
- Constructor / destructor used to initialize / destroy the object.
malloc / free- Allocate / release memory
- Memory allocated from 'Heap'.
- Returns a
void*.
- Returns
NULLon failure.
- Must specify the size required in bytes.
- Allocating array requires manual calculation of space.
- Reallocating larger chunk of memory simple (no copy constructor to worry about).
- They will NOT call
new/delete.
- No way to splice user code into the allocation sequence to help with low memory.
malloc/freecan NOT be overridden legally.
Table comparison of the features:
Feature
new / deletemalloc / freeMemory allocated from
'Free Store'
'Heap'
Returns
Fully typed pointer
void*On failure
Throws (never returns
NULL)Returns
NULLRequired 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 constructor / 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 cannot be mixed.Context
Stack Overflow Q#240212, score: 513
Revisions (0)
No revisions yet.