VirtualAlloc is thesystem call that maps physical memory to the address space of the requesting process. As a system call, it is slow; and it should never be used directly in applications. An application should use memory allocation routines instead. Of those, malloc is the most known. It's the C runtime call that returns the address to a memory block of requested size. Internally, it refers to VirtualAlloc (or other system calls, e.g. mmap or sbrk, depending on the operating system); but it does it smartly, requesting memory from OS in big portions, and managing smaller memory blocks for application requests in internal structure called a heap. C++ memory allocation via new and delete operators usually refers to malloc.
The TBB memory allocator provides an alternative to malloc called scalable_malloc. So it also does memory management, but it's especially designed to use in multithreaded applications serving concurrent allocation requests faster. 8K is the approximate size limit for requests that scalable_allocator serves from its own structures; for bigger requests, it refers to malloc but not to VirtualAlloc because malloc is faster.
Thank you very much...I have another question as well then..
I read in the book Intel Threading Building Blocks by James Reinders (chapter 6 Scalable Memory Allocation, page 101) that scalable memory allocator comes at a cost of virtual space and that it wastes a lot of space when allocating blocks int the 9K to 12K range.
But I see malloc being used to allocate memoryfor sizes greater than 8K bytes.Can you please clarify as to how and why this wastage of virtualspace happens?If that is really the case, then whydoesit happen only in the 9Kto 12Krange.?Why not for sizes more than 12K.?
And I would also be pleasedto knowin which way the scalable allocator is not terribly sophisticated about paging issues (as told in the book)?
At the time the book was written, TBB scalable allocator used VirtualAlloc for large allocations. We changed it to malloc very close to TBB 2.0 release when it was late to make changes in the book.