Allocation in V8 Link to heading
V8 allocate C free store using malloc and free.
void* Malloced::New(size_t size) {
ASSERT(NativeAllocationChecker::allocation_allowed());
void* result = malloc(size);
if (result == NULL) V8::FatalProcessOutOfMemory("Malloced operator new");
return result;
}
void Malloced::Delete(void* p) {
free(p);
}
Besides of that, V8 defined a PreallocatedStorage (double linked list) to manage allocated memorry.
link chunks

unlink chunks
When we need to allocate some memorry, first V8 will find available memorry chunk in free_list_ that fit before call Malloced::New() to allocate new memorry. And when V8 done using a memorry chunk, it does not free instantly. Instead, V8 just removes the chunk from in_use_list_ and move it to free_list_.
find fit memorry chunk

add free chunk to in used
malloc and free memorry. But this is the heart of everything. In next posts, we will see how PreallocatedStorage is used by V8 in specific scenarios.