Почему термины «автоматический» и «динамический» предпочтительнее, чем термины «стек» и «куча» в управлении памятью C ++?

c++ stack heap automatic-storage

5050 просмотра

6 ответа

В связи с большим количеством вопросов и ответов по SO, я узнал, что лучше обращаться к объектам, чье время жизни управляется как находящееся в автоматическом хранилище, а не в стеке.

Кроме того, динамически распределяемые объекты следует называть не находящимися в куче, а в динамическом хранилище.

Я понимаю, что существует автоматическое, динамическое и статическое хранилище, но никогда не понимал разницу между автоматическим стеком и динамической кучей. Почему первое предпочтительнее?

Я не спрашиваю, что означает стек / куча или как работает управление памятью. Я спрашиваю, почему термины «автоматическое / динамическое хранилище» предпочтительнее, чем термины «стек / куча».

Автор: Luchian Grigore Источник Размещён: 12.11.2019 09:23

Ответы (6)


32 плюса

Решение

Automatic сообщает мне кое-что о времени жизни объекта: в частности, что он автоматически привязан к окружающей области и будет автоматически уничтожен при выходе из этой области.

Dynamic сообщает мне, что время жизни объекта не контролируется компилятором автоматически , а находится под моим непосредственным контролем.

Стек является перегруженным именем для типа контейнера и для соответствующего протокола указателя популярных команд, поддерживаемого общими callи retинструкциями. Он ничего не говорит мне о времени жизни объекта, кроме как через историческую связь с временем жизни объекта в C из-за популярных соглашений стекового фрейма. Также обратите внимание, что в некоторых реализациях локальное хранилище потока находится в стеке потока, но не ограничено областью действия какой-либо одной функции.

Куча снова является перегруженным именем, указывающим либо тип отсортированного контейнера, либо систему управления бесплатными хранилищами. Это не единственное бесплатное хранилище, доступное во всех системах, и при этом оно не говорит мне ничего конкретного о времени жизни объекта, выделенного для new.

Автор: Useless Размещён: 07.02.2012 07:05

9 плюса

В большинстве реализаций стек используется для автоматического сохранения объектов. Это не требуется стандартом, но в наши дни это хорошо работает на большинстве архитектур ЦП.

Реализации используют различные стратегии для поддержки объектов с динамической продолжительностью хранения. Я не уверен, что куча - лучший способ описать то, что используют современные распределители памяти, но это, кажется, "исторический" термин для этого.

Таким образом, автоматическое / динамическое хранение - это термины, которые стандарт использует для классификации («абстрактного») времени жизни объекта. Это те термины, которые следует использовать, если вы хотите говорить об объектах так, как их описывает стандарт.
Стеки и кучи - это («конкретные») методы реализации, которые можно использовать для их поддержки. Использование этих терминов менее правильно, если вы не говорите о конкретной реализации.

Автор: Mat Размещён: 07.02.2012 06:47

6 плюса

Условия автоматического / динамического хранения предпочтительны просто потому, что этого требует стандарт. Стек / куча основаны на реализации и теоретически могут быть реализованы другим способом.

Автор: Asaf Размещён: 07.02.2012 06:43

5 плюса

Технически говоря, выделение стека / кучи - это детали реализации, в то время как автоматическое / динамическое хранение - более общие термины. Сам стандарт не требует, чтобы распределитель использовал стек / кучу. Поэтому автоматический / динамический - более правильный термин, хотя лично я нахожу это различие немного чрезмерно педантичным.

Автор: Grizzly Размещён: 07.02.2012 06:47

4 плюса

Термины «статическая продолжительность хранения», «длительность автоматического хранения» и «длительность динамического хранения» встречаются в стандарте C ++.

Термины «стек» и «куча» используется для обозначения функций в стандартной библиотеке ( stack<>, make_heap(), push_heap()и т.д.) , которые имеют мало общего с длительностью хранения.

Автор: Kristopher Johnson Размещён: 07.02.2012 06:56

1 плюс

Стек и куча привносят в картину понятия, связанные с реализацией, тогда как термины «автоматический» и «динамический» являются более общими

Автор: Jannat Arora Размещён: 07.02.2012 06:54
Вопросы из категории :
32x32