2016-04-20 2 views
0

Я хотел бы знать, действительно ли стек и куча, упомянутые в стеке и кучевой памяти, реализованы как структуры стека и кучи данных?Являются ли стек и память кучи фактически реализованы как структуры данных стека и кучи?

Я думаю, что стек фактически представляет собой стек, который имеет указатели на переменные LIFO (Last In First Out), объявленные в функциях, однако я хотел подтвердить, а также спросить, имеет ли куча больше, чем просто ее имя для данных динамического дерева структура, которая удовлетворяет свойству кучи? Недавно я много читал о стеке и куче и считаю, что понимаю концепцию, но потом мне стало интересно узнать о реальной реализации. Я предполагаю, что это может быть разным и на разных архитектурах, и не может быть конкретного общего ответа для всех компьютеров и ОС.

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

What and where are the stack and heap? http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/ https://www.youtube.com/watch?v=_8-ht2AKyH4

ответ

1

Память кучи решительно не структура кучи данных. То есть, это не очередь приоритетов. Я полагаю, вы могли бы использовать кучу очереди приоритетов для создания кучи памяти, но есть намного лучшие способы сделать это.

Стек - это ... хорошо ... Как правило, стек является фиксированным блоком памяти, выделенным для процесса. Сам процессор рассматривает этот блок памяти как чистый стек. То есть указатель стека процессора указывает на вершину стека, а команды push и pop работают, как ожидалось, добавляя вещи и удаляя вещи из стека. Таким образом, это LIFO.

Однако процессор может делать всевозможные вещи со стеком: нажимать и поп различного размера, обращаться непосредственно к нему (т. Е. Просматривать третий элемент без появления первых двух) и т. Д. Поэтому, хотя стек процессора делает имеют инструкции push и pop, он также имеет гораздо более расширенную функциональность. Я бы не назвал его чистой структурой данных LIFO.

0

Куча памяти: Это не должно быть структурой данных кучи. Куча служит областью памяти нефиксированного размера в виртуальной памяти, а функции, которые она предоставляет программистам, - это распределения и освобождения. Куча может быть реализована с различными структурами данных. Что касается родной разработки C и C++, структура памяти кучи будет определяться используемыми вами распределителями. Они будут отвечать за управление необходимыми структурами данных и виртуальной памятью. В ссылке ниже, вы можете увидеть реализацию по умолчанию на Windows, Linux и MacOS: http://core-analyzer.sourceforge.net/index_files/Page335.html

Stack память: Это Безразлично `должно быть реализовано в виде пакета (первый в последних из) структур данных, однако функциональность, которую он предоставляет (не для программистов), представляет собой структуру данных стека. (Процессор будет обрабатывать эту память, заданную операционной системой как структуру данных стека). Это область памяти фиксированного размера в виртуальной памяти. В современных операционных системах, стеки будут на поток, и вы можете также определить, что ограничение с помощью ULIMIT в Linux, с другой стороны, в стороне Windows, это параметр линкера: https://msdn.microsoft.com/en-US/library/8cxs58a6(v=vs.120).aspx

Вот еще один хорошее чтение: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

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