буст-пул альтернатива calloc - PullRequest
1 голос
/ 18 октября 2011

все,

Если вы используете библиотеку пулов бустеров, как бы вы заменили следующий оператор:

MyStruct *someStruct = (MyStruct *) calloc(numOfElements, sizeof(MyStruct));

Если бы это был один элемент, я бы сделал:1007 *

но так как "numOfElements" является переменной, я чувствую, что выполнение цикла malloc () не очень хорошая идея?

1 Ответ

3 голосов
/ 18 октября 2011

Я бы сказал, что вам нужно использовать pool_alloc интерфейс:

static pointer allocate(size_type n);
static pointer allocate(size_type n, pointer);
static void deallocate(pointer ptr, size_type n);

Образец из http://www.boost.org/doc/libs/1_47_0/libs/pool/doc/interfaces.html

void func()
{
    std::vector<int, boost::pool_allocator<int> > v;
    for (int i = 0; i < 10000; ++i)
        v.push_back(13);
} // Exiting the function does NOT free the system memory allocated by the pool allocator
  // You must call
  //  boost::singleton_pool<boost::pool_allocator_tag, sizeof(int)>::release_memory()
  // in order to force that
...