int main( int argc, char** argv ) { struct cell *cells_local[N]; int arg; size_t i; struct pool *p = allocate_pool(); struct cell **cells = static_roots ? cells_static : cells_local; assert(argc == 2); assert(argv[1]); assert(strlen(argv[1]) == 1); assert(argv[1][0] >= '0' && argv[1][0] <= '5'); arg = atoi( argv[1] ); set_flags( arg ); memset(cells_static, 0, sizeof(cells_static)); memset(cells_local, 0, sizeof(cells_local)); for (i = 0; i < N; ++i) { cells[i] = allocate_from_pool(p, sizeof(struct cell)); } if (trim_pool) VALGRIND_MEMPOOL_TRIM(p, p->buf+(10 * sizeof(struct cell)), 20 * sizeof(struct cell) + 2); if (destroy_pool) VALGRIND_DESTROY_MEMPOOL(p); return 0; }
/*! \param size_bytes size in bytes of the buffer */ void * btGenericMemoryPool::allocate(size_t size_bytes) { size_t module = size_bytes%m_element_size; size_t element_count = size_bytes/m_element_size; if(module>0) element_count++; size_t alloc_pos = allocate_from_free_nodes(element_count); // a free node is found if(alloc_pos != BT_UINT_MAX) { return get_element_data(alloc_pos); } // allocate directly on pool alloc_pos = allocate_from_pool(element_count); if(alloc_pos == BT_UINT_MAX) return NULL; // not space return get_element_data(alloc_pos); }