уточнение поведения пула памяти pool_allocator

Дополнительная документация, как показано ниже:

Заметка

Основной singleton_pool используемый распределителем this создает экземпляр пула, который никогда не освобождается. Это означает, что память, выделенная распределителем, может все еще использоваться после main() завершена, но может означать, что некоторые программы проверки памяти будут жаловаться на утечки.

Я запутался, так как я проверил код и singleton_pool По-видимому, все еще создаются только в куче текущего процесса. То есть если процесс будет убит ОС, такой пул будет освобожден в любом случае? Тогда вышеприведенные заметки просто означают, что какой-то поток демонов продолжает работать и такой пул все еще доступен после main ()? Или это на самом деле означает, что пул не будет освобожден даже после полного уничтожения процесса?

Мне тоже кажется pool_allocator а также fast_pool_allocator используют идентичный механизм для выделения памяти, то есть от такого singleton_pool синглтон. Однако это примечание не указано для fast_pool_allocator, Я бы сказал, что они оба ведут себя одинаково для такой заметки выше. Я прав?

Пожалуйста помоги. Благодарю.

1

Решение

singleton_pool реализует потокобезопасный (при некоторых условиях) синглтон без блокировок, используя функцию инициализации нелокальных статических переменных. Часть исходного кода:

template <typename Tag,
unsigned RequestedSize,
typename UserAllocator,
typename Mutex,
unsigned NextSize,
unsigned MaxSize >
class singleton_pool
{
...
struct object_creator
{
object_creator()
{  // This constructor does nothing more than ensure that instance()
//  is called before main() begins, thus creating the static
//  T object before multithreading race issues can come up.
singleton_pool<Tag, RequestedSize, UserAllocator, Mutex, NextSize, MaxSize>::get_pool();
}
inline void do_nothing() const
{
}
};
static object_creator create_object;
}; // struct singleton_pool

нелокальные переменные инициализируются как часть запуска программы перед началом выполнения основной функции и срываются при завершении программы. Чтобы singleton_pool будет создан до main()и уничтожен после main(), Если процесс все равно будет прерван, пул будет освобожден.

0

Другие решения

Других решений пока нет …