Does malloc allocate a block of memory on the heap or should it be called Virtual Address Space?
Am I being picky calling it Virtual Address Space or this just the legacy of DOS? How about Linux?
EDIT:
many answers with great details, none of them answer my question, though.
The function MALLOC() allocates an area of memory and returns the address of the start of that area. The argument to the function is an integer specifying the amount of memory to be allocated, in bytes. If successful, it returns a pointer to the first item of the region; otherwise, it returns an integer 0.
Return Value malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. To return a pointer to a type other than void , use a type cast on the return value.
In C, the library function malloc is used to allocate a block of memory on the heap. The program accesses this block of memory via a pointer that malloc returns. When the memory is no longer needed, the pointer is passed to free which deallocates the memory so that it can be used for other purposes.
Normally, malloc() allocates memory from the heap, and adjusts the size of the heap as required, using sbrk(2).
malloc
allocates memory on the heap, period.
Your C library typically keeps a list (or some more intricate data structure) of available memory chunks, finding a suitable chunk to satisfy a malloc
(possibly splitting a larger chunk into a number of smaller ones) and returning free
'd memory to the list (possibly merging a few smaller chunks into a bigger one)
Only when the list doesn't contain a large enough chunk to satisfy your malloc
, the library will ask the OS for more memory, e.g. using the sbrk syscall. The address returned by this syscall may be a virtual address, or a real one, depending on your hardware, but as a programmer you cannot (and don't need to) know this.
Saying that malloc
allocates virtual adress space rather than a block on the heap is like saying that read
reads from your hard disk rather than from a file: it is irrelevant from the caller's perspective, and not always true.
There are at least 3 ways of measuring memory consumption:
malloc
generally affects them all.
Edit: So, the best way I can think to answer your question is to say:
malloc
allocates virtual memory.
And virtual memory consumes:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With