Использует ли связанный список C ++ (std :: list) новый по отношению к куче памяти?

Использование Visual Studio для C ++; std :: list использует new для размещения узлов? Я спрашиваю, потому что я кодирую кучу памяти как вызов и, если она использует новый, это снижает эффективность кучи памяти.

Куча памяти согласно этому вопросу, первый ответ: Как реализовать кучу памяти

Если он использует новый, как бы я это исправить (в связи с использованием связанного списка для кучи памяти, изложенной в ответе на предыдущий вопрос)?

Благодарю.

1

Решение

Контейнеры STL (так называемые, потому что дизайн основан на STL) в Стандарте C ++ имеют параметр шаблона, который определяет распределитель. Этот распределитель используется. По умолчанию используется распределитель, предоставляемый библиотекой, но вы можете передать свой собственный, который использует вашу пользовательскую кучу.

5

Другие решения

Все стандартные контейнеры библиотеки шаблонов используют абстракцию (называемую Allocator) для выделения памяти, по умолчанию std::allocator<T>, Этот распределитель по умолчанию использует новый, но это не мешает вам использовать (писать) тот, который не использует.

Вы можете видеть из эта документация что второй параметр шаблона является распределителем для использования.

4

Да, он использует new косвенно через его Allocator параметр. Вы можете написать пользовательский распределитель который использует вашу кучу, и создать экземпляр listс этим.

1

Да, std :: list по умолчанию использует std :: allocator, который использует new,

Но вы можете написать свой собственный класс распределителя, который использует любую схему размещения и передать ее в качестве второго аргумента шаблона в std :: list.

0
По вопросам рекламы [email protected]