Какие другие формы автоматического и динамического хранения были реализованы для C++, кроме модели стека и кучи?

Термины "автоматическое" и "динамическое" хранилище, возможно, предпочтительнее в спецификациях C++, чем "стек" и "куча" соответственно, потому что спецификации C++ не требуют, чтобы распределение / освобождение осуществлялось конкретно с использованием модели стека / кучи.

Существуют ли альтернативные модели для распределения / освобождения, кроме стека и кучи?

2 ответа

Было проведено множество исследований в распределителях (удачных или нет), с разным расположением памяти, сегрегацией и т. Д. Андрей Александреску написал классную презентацию о тех CppCon 2015: Андрей Александреску "std::allocator...". Вы можете найти это полезным.

Один из приведенных им примеров может пролить некоторый свет на возможности:

typedef Segregator<4096,
    Segregator<128,
        Freelist<Mallocator, 0, 128>,
        MediumAllocator>,
    Mallocator>
Allocator;

Стратегия размещения:

  • если объект меньше 4096B:
    • если объект меньше 128B, используйте Freelist (пакеты элементов),
    • иначе используйте MediumAllocator (предположительно, хорошо для объектов среднего размера),
  • еще использовать Mallocator (на основе malloc) выделить блок памяти.

Поэтому, в зависимости от типа объектов, вы можете использовать другую стратегию распределения (также есть выбор на основе стека).

Терминологические мнения, кажется, основаны на ошибочных предположениях.

Что касается схем размещения, трудно понять, что вы подразумеваете под "кучей", но если вы имеете в виду явное освобождение динамически размещаемых объектов, то C++ никогда формально не требовал этого. Когда сборка мусора получила некоторую поддержку в C++11, это произошло потому, что это уже проверенная технология, например, сборщик мусора Boehm для C++ 03.

C++ требует и всегда требовал стек, но не какую-либо конкретную реализацию этого стека. При тонкой совместной многозадачности может случиться так, что мы увидим реализации, использующие стеки на основе связанного списка. Я пока не знаю ничего подобного, по состоянию на 2016 год.

Другие вопросы по тегам