Сбой при попытке написать собственный распределитель allocate_shared и сделать его thread_local

Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]

здесь максимальная память кучи как -Xmx, минимальная память кучи как -Xms, стек памяти как -Xss и -XX maxPermSize

Следующий пример иллюстрирует эту ситуацию. Я запустил свой tomcat со следующими параметрами запуска:

-Xmx168m -Xms168m -XX:PermSize=32m -XX:MaxPermSize=32m -Xss1m
1
задан demonatic 4 March 2019 в 12:07
поделиться

1 ответ

Оба ваших конструктора копирования для ObjectAllocator создают новый экземпляр boost::pool каждый раз, когда их вызывают.

Когда std::allocate_shared копирует распределитель ( cppreference ), экземпляр ObjectAllocator, использованный для выделения std::shared_ptr, разрушается вместе с его пулом до уничтожения shared_ptr.

Смежный вопрос: Проблемы с выделением памяти в C ++ с удалением выделения памяти

Возможно, это не связано с вашей проблемой, но есть и несколько других проблем:

  • вы надеваете не присоединяйтесь к thread1 в main. Это вызовет std::terminate и приведет к сбою вашей программы.
  • boost::pool<> ObjectAllocator<T>::pool_(block_size); - часть ObjectAllocator<T>:: является лишней и нестандартной. (afaik принимается только в MSVC)
0
ответ дан v154c1 4 March 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: