2013-07-23 2 views
0

Возможно ли использовать один пул памяти для переменных типа с использованием нового места размещения. Мне нужно, чтобы целочисленные и символьные переменные были объявлены в одном пуле.Управление памятью с использованием места размещения

Должен ли я разделить пул на 2, а затем использовать его для разных типов переменных или есть какой-то другой подход?

+3

ли вы рассмотреть возможность использования союзов для этого? 'union {int i; char c; }; ' – tohava

+0

wont объединение должно быть 4 байта, даже если я использую его для символов, тем самым теряя память? – Saksham

+0

Я сомневаюсь, что распределитель выделит меньше четырех байтов из-за проблем с выравниванием. – Devolus

ответ

1

Короткий ответ - да, но это, как правило, необходимо только тогда, когда у вас имеется некорректная память IO (общая память ???). AFAIK нет увеличения скорости. Что конкретно вы делаете?

Вы считаете, что используете сторонний пул? Я нашел действительно общую реализацию here.

Boost::pool также может быть интересно

2

Если ваши типы данных являются переменной длиной, вам лучше использовать стандартную кучу для управления памятью. Стандартная куча высоко оптимизирована для этого прецедента.

Использование пула памяти обычно становится полезным только при последовательном распределении объектов одного размера. Затем становится легко разделить ваш пул на ячейки равного размера, чтобы выполнять оптимизации, такие как списки свободных списков, которые невозможно выполнить с помощью системной кучи.

+0

Я писал программу для имитации встроенного проекта, поэтому для этого нужен пул памяти, а не стандартная куча – Saksham

Смежные вопросы