Why is malloc()'s pool called a "heap"? [duplicate] - c

This question already has answers here:
Why are two different concepts both called "heap"? [duplicate]
(9 answers)
What is a Memory Heap?
(8 answers)
Closed 9 years ago.
Can anyone explain why the pool of memory managed by malloc() / free() is called a heap?
Based on [1]: http://www.google.com/url?q=http://gee.cs.oswego.edu/dl/html/malloc.html&sa=D&sntz=1&usg=AFQjCNHaQLotbBKKwYqxiiYWN1146BWzFw "Doug Lea's explanation of how his malloc() works",
it's not obvious that the data structure which we call a "heap" is being used at all.
Do we call it a "heap" because it's common for malloc() implementations to use best-fit selection of the memory chunk to return, and that's historically been implemented using a min-heap of chunks, sorted by chunk size?

Related

Why doesn't malloc initialize allocated memory to zero? [duplicate]

This question already has answers here:
Difference between malloc and calloc?
(14 answers)
Closed 1 year ago.
From Wikipedia:
malloc() does not initialize the memory allocated, while calloc()
guarantees that all bytes of the allocated memory block have been
initialized to 0.
I understand that malloc doesn't initialize the memory to anything, but I have to wonder, why is this the case? Was there a specific reason behind this design decision? It seems like a bit of an antipattern to use calloc(sizeof(T), 1) in my humble opinion and I want to understand the intention.
Because we really don't want to waste all that CPU. It's sooo expensive.
Yes really. You're going to overwrite it anyway.

Is free/=NULL enough to clear memory, or should SecureZeroMemory be placed immediately before it? [duplicate]

This question already has answers here:
When should SecureZeroMemory() be used?
(2 answers)
Is free() zeroing out memory?
(7 answers)
Why doesn't free() zero out the memory prior to releasing it?
(17 answers)
Does using SecureZeroMemory() really help to make the application more secure?
(5 answers)
Closed 5 years ago.
What's the best way to clear out this allocated memory?
Is free/=NULL all that's needed
Does SecureZeroMemory before doing a free/=NULL add to the security of the code?
Or, is adding SecureZeroMemory overkill?
Here's my code:
DWORD tLen = 128;
BYTE *pbData = (BYTE *)malloc(tLen);
memcpy(pbData, chBuffer, tLen);
// ...work done here...
// Clear it
SecureZeroMemory(pbData, tLen);
free(pbData);pbData=NULL;
Thanks!
EDIT: This question is not a duplicate of the question some people have said it is. It is not asking when to use SecureZeroMemory, but the best practice when used with free/=NULL.
It depends what your program is doing. If someone else can look at a buffer of freed memory, is that a concern to you? If the memory contains bank account details, I'd say that it is. If it contains settings for a video game, maybe not (depending on how determined your users are to cheat).
Bit generally it doesn't do any harm to shred memory before freeing it.

A zero byte allocation should be considered a leak? [duplicate]

This question already has answers here:
What's the point of malloc(0)?
(17 answers)
Closed 6 years ago.
I'm checking memory allocation with poolmon for a C application, after uninstall it still have 1 allocation with zero bytes. Can this be considered as a memory leak?
It's an implementation defined.
But even malloc(0) must be free()'d.

The use of free function in c [duplicate]

This question already has answers here:
Using pointer after free()
(6 answers)
Closed 6 years ago.
I allocated memory for pointer using malloc function. I had deallocate memory using free. But whenever I'm trying to print the content of pointer it prints the content.
Then what is the use of free()?
free() just marks the memory as available (as in, it can be used for further allocations). It does not removes the content of the memory.
That said, you should not access the content of a freed memory, as it is Undefined Behavior.

Should global static arrays be freed? [duplicate]

This question already has answers here:
Freeing global variable
(2 answers)
Closed 7 years ago.
Say I declare a global array int arr[10]; Should I free it somehow in the end?
You need not free it.You should use free() only when you have use malloc().
No. You can't free it and you don't need to. arr is in static storage which means that it is created on program startup and destroyed on program termination. Explicit freeing is neither possible nor required as the storage is automatically freed on program termination.

Resources