Ищите решение для контейнера и пула памяти - PullRequest
1 голос
/ 09 марта 2010

Во встроенной программе у меня есть экранный объект, который должен управлять списком элементов для отображения. Первоначальный список элементов будет извлечен из простой БД при загрузке экрана, а список будет обновляться с помощью событий «Добавить» и «Удалить». Этот список необходимо отсортировать по определенным критериям. Я ищу контейнерный класс, который может помочь мне достичь этого. Кроме того, в системе нет динамической памяти, поэтому мне нужно иметь пул памяти с пустыми элементами, которые я могу загрузить в контейнер и вернуть в свободный пул, когда закончу с элементом.

Кто-нибудь знает что-нибудь подходящее в стандартной библиотеке C ++ или Boost? Или, может быть, другое решение?

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

почему бы не использовать STL, но предоставить свой собственный распределитель и освобождающий модуль, например, вектор STL определен как template<class T,class A = std::allocator<T>> vector {}, вы можете создать и установить собственный распределитель, который запрашивает пространство памяти у вашего пула памяти.

Что касается распределителя памяти, вы используете существующий распределитель памяти, такой как Hoard http://www.hoard.org/ или Ned Allocator http://www.nedprod.com/programs/portable/nedmalloc/, что является довольно высокой производительностью и хорошо для встроенной системы.

1 голос
/ 09 марта 2010

Если вы используете стандартный контейнер (такой как std::map или std::set), вам нужно беспокоиться о различных динамических распределениях: выделении внутренних структур данных контейнера и выделении ваших собственных данных, которые вы хотите сохранить в контейнер. Распределение внутренних структур данных может быть настроено с помощью собственного std :: allocator (я уверен, что вы сможете найти тот, который соответствует вашим потребностям, их достаточно). Выделение ваших собственных структур данных необходимо обрабатывать отдельно, чаще всего путем реализации специфических для типа операторов new и delete. У Скотта Мейерса есть хорошая статья об этом в одной из его книг.

Другим решением будет использование Boost.Intrusive, набора контейнеров, в котором все внутренние элементы данных, необходимые для контейнера, хранятся в ваших собственных структурах данных (поэтому они называются навязчивыми). Это избавляет вас от двух разных схем распределения, так как вам нужно беспокоиться только о собственном распределении данных.

...