void* heap_alloc_large(pony_actor_t* actor, heap_t* heap, size_t size) { size = pool_adjust_size(size); chunk_t* chunk = (chunk_t*) POOL_ALLOC(chunk_t); chunk->actor = actor; chunk->size = size; chunk->m = (char*) pool_alloc_size(size); chunk->slots = 0; chunk->shallow = 0; large_pagemap(chunk->m, size, chunk); chunk->next = heap->large; heap->large = chunk; heap->used += chunk->size; return chunk->m; }
void pool_free_size(size_t size, void* p) { size_t index = pool_index(size); if(index < POOL_COUNT) return pool_free(index, p); #ifdef USE_VALGRIND VALGRIND_DISABLE_ERROR_REPORTING; #endif size = pool_adjust_size(size); pool_free_pages(p, size); TRACK_FREE(p, size); #ifdef USE_VALGRIND VALGRIND_ENABLE_ERROR_REPORTING; VALGRIND_FREELIKE_BLOCK(p, 0); #endif }
void* pool_alloc_size(size_t size) { size_t index = pool_index(size); if(index < POOL_COUNT) return pool_alloc(index); #ifdef USE_VALGRIND VALGRIND_DISABLE_ERROR_REPORTING; #endif size = pool_adjust_size(size); void* p = pool_alloc_pages(size); TRACK_ALLOC(p, size); #ifdef USE_VALGRIND VALGRIND_ENABLE_ERROR_REPORTING; VALGRIND_MALLOCLIKE_BLOCK(p, size, 0, 0); #endif return p; }