void* dpBlockAllocator<PageSize, BlockSize>::allocate() { for(size_t i=0; i<m_pages.size(); ++i) { if(void *ret=m_pages[i]->allocate()) { return ret; } } Page *p = new Page(); m_pages.push_back(p); return p->allocate(); }
void* dpTrampolineAllocator::allocate(void *location) { void *ret = nullptr; if(Page *page=findCandidatePage(location)) { ret = page->allocate(); } if(!ret) { Page *page = createPage(location); ret = page->allocate(); } return ret; }
void multipleAllocFreeTest() { int i; Page *page; uint32_t ps = ((LocalEnvironment *)m_env)->get_page_size(); for (i = 0; i < 10; i++) { page = new Page(((LocalEnvironment *)m_env)->get_device()); page->allocate(0, ps); /* i+2 since we need 1 page for the header page and one page * for the root page */ if (!m_inmemory) REQUIRE(page->get_address() == (i + 2) * ps); delete page; } }
void allocFreeTest() { Page *page; page = new Page(((LocalEnvironment *)m_env)->get_device()); page->allocate(0, 1024); delete page; }