Мне нужны некоторые пояснения по концепции и реализации пула памяти.
По пулу памяти в вики говорится, что
также называемое выделением блоков фиксированного размера, ... , поскольку эти реализации страдают от фрагментации из-за блоков переменного размера, их может быть невозможно использовать в системе реального времени из-за производительности.
Как происходит «переменный размер блока вызывает фрагментацию»? Как распределение фиксированного размера может решить эту проблему? Это вики-описание кажется мне немного неверным. Я думаю, что фрагментация не может быть предотвращена выделением фиксированного размера или вызвана переменным размером. В контексте пула памяти фрагментации избегают с помощью специально разработанных распределителей памяти для конкретного приложения или уменьшают за счет ограниченного использования предполагаемого блока памяти.
Также с помощью нескольких примеров реализации, например, Пример кода 1 и Пример кода 2, мне кажется, чтобы использовать пул памяти, разработчик должен знать тип данных очень хорошо, затем вырежьте, разделите или организуйте данные в связанные фрагменты памяти (если данные близки к связанному списку) или иерархически связанные фрагменты (если данные более иерархически организованы, например файлы). Кроме того, похоже, что разработчик должен заранее предсказать, сколько памяти ему нужно.
Ну, я могу представить, что это хорошо работает для массива примитивных данных. Как насчет непримитивных классов данных C++, в которых модель памяти не столь очевидна? Даже для примитивных данных должен ли разработчик учитывать выравнивание типов данных?
Есть ли хорошая библиотека пула памяти для C и C++?
Спасибо за любые комментарии!
sizeof
, чтобы иметь только одну реализацию, поскольку код управления может быть одинаковым для всех. - person R. Martinho Fernandes   schedule 19.07.2011