boost::pool_allocator нужны восемь статических библиотек?
Я попытался добавить в свой проект довольно ограниченную функциональность из библиотеки Boost, а именно выделить память для небольших объектов из пула с помощью класса 'pool_allocator', и обнаружил, что мне нужно добавить в проект зависимости от 4 отладочных статических библиотек. файлы и до 4 выпуска статических файлов библиотеки. Т.е. 8 зависимостей файла библиотеки необходимы для одной строки, например:
boost::container::vector<int, boost::pool_allocator<int> > v;
Есть ли способ использовать эти классы без ссылки на статические библиотеки? (Может быть, определенная комбинация параметров шаблона?)
2 ответа
Все, что я прочитал о буст-пуле, это: не используйте его вообще. Библиотека довольно старая (в boost 1.54 все файлы имеют авторские права 2000 и 2001, кроме pool_alloc.hpp, который был отредактирован в 2010 году). Здесь вы можете найти вопрос о производительности (ищите ответ Джеймса Канзе). Если вы хотите использовать только boost, я бы предложил использовать другую библиотеку. Если вам нужен собственный распределитель, сделайте тесты.
Редактировать:
Из пулов документа:
В общем, используйте Пулы, когда вам нужен более эффективный способ сделать необычное управление памятью.
Так что q ное это то, что именно необычный контроль памяти? Удовлетворяет ли это вашу особую потребность в памяти? Андрей Александреску написал в "Современном C++ Design" о распределении памяти и о том, что могут быть очень разные требования в зависимости от моделей выделения и освобождения. Но согласно этой статье он не уверен, что это была очень хорошая глава.
Так что для меня последний вопрос, является ли пул лучше, чем std::allocator для управления памятью проблем? Вы должны испортить это. Даже если в пуле реализована небольшая логика, в вашей реализации могут быть более эффективные алгоритмы управления памятью. Кстати, одна из ошибок пула - "Boost pool library - это не заголовок только как заявлено в документации".
Определите файлы, запрашиваемые из boost, и добавьте их в свой проект по отдельности, или добавьте.cpp в свой проект, который # включает в себя требуемые.cpp. (Не очень рекомендуется)
или же
сгенерируйте ваши файлы проекта с помощью скрипта, так что добавить такие зависимости легко. Настройка это боль, но иметь это здорово