static void test_foo( void ) { char tiny_buf[sizeof(Foo) - 1]; sbe::FixedAllocator<Foo> tiny_alloc( tiny_buf, sizeof(tiny_buf) ); SBE_ASSERT( tiny_alloc.allocate() == NULL ); //-------------------------------------------------------// char buf[sizeof(Foo) * 3 + 4]; sbe::FixedAllocator<Foo> alloc( buf, sizeof(buf) ); Foo* ptr[3]; for (size_t i = 0; i < 3; ++i) { ptr[i] = alloc.allocate(); SBE_ASSERT( ptr[i] != NULL ); } SBE_ASSERT( alloc.allocate() == NULL ); for (size_t i = 0; i < 3; ++i) { alloc.deallocate( ptr[i] ); } SBE_ASSERT( alloc.test() ); std::cout << "Test: 'test_foo' - " << "PASSED" << std::endl; }
void *cgc_malloc_alloc(malloc_t *heap, cgc_size_t n) { void *ptr; if (n > MAX_SIZE) return NULL; n = ALIGNED(n, 4); if (n < TINY_SIZE) ptr = tiny_alloc(heap, TINY_SIZE); else if (n < SMALL_SIZE) ptr = tiny_alloc(heap, n); else if (n < LARGE_SIZE) ptr = small_alloc(heap, n); else ptr = large_alloc(heap, n); return ptr; }