MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / pool_alloc

Method pool_alloc

dds/DCPS/MemoryPool.cpp:333–373  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

331}
332
333void*
334MemoryPool::pool_alloc(size_t size)
335{
336#if defined(WITH_VALGRIND)
337 VALGRIND_DISABLE_ADDR_ERROR_REPORTING_IN_RANGE(pool_ptr_, pool_size_);
338#endif
339
340 // Pointer to return
341 unsigned char* block = NULL;
342
343 // Round up to 8-byte boundary
344 size_t aligned_size = align(size, granularity_);
345
346 if (aligned_size < min_alloc_size_) {
347 aligned_size = min_alloc_size_;
348 }
349
350 // The block to allocate from
351 FreeHeader* block_to_alloc = free_index_.find(aligned_size, pool_ptr_);
352
353 if (block_to_alloc) {
354 block = allocate(block_to_alloc, aligned_size);
355 }
356
357 // Update lwm
358 size_t largest_free_bytes = largest_free_ ? largest_free_->size() : 0;
359 if (largest_free_bytes < lwm_free_bytes_) {
360 lwm_free_bytes_ = largest_free_bytes;
361 }
362
363#ifdef VALIDATE_MEMORY_POOL
364 validate_pool(*this, false);
365#endif
366
367#if defined(WITH_VALGRIND)
368 VALGRIND_ENABLE_ADDR_ERROR_REPORTING_IN_RANGE(pool_ptr_, pool_size_);
369 VALGRIND_MEMPOOL_ALLOC(pool_ptr_, block, size);
370#endif
371
372 return block;
373}
374
375bool
376MemoryPool::pool_free(void* ptr)

Calls 4

allocateFunction · 0.85
alignFunction · 0.70
findMethod · 0.45
sizeMethod · 0.45