Каково основное происхождение разделения памяти на кучу и стек? - PullRequest
0 голосов
/ 27 января 2019

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

Например, скажем, у нас есть компьютер без какой-либо ОС, и мы хотим создать загрузочную программу с языком ассемблера для x86.Я предполагаю, что мы можем сделать это (лично я не знаю ассемблера, но некоторые люди все равно пишут ОС).Итак, главный вопрос: можем ли мы уже работать с кучей и стеком, или мы должны создать для этого какой-то механизм управления памятью?Если да, то как это возможно с точки зрения программирования на голом металле?

1 Ответ

0 голосов
/ 27 января 2019

Добавление чего-то к другому ответу, довольно правильное, но, возможно, не очень полное.

Куча и стек - это два (программных) способа «управления» памятью.Физическая память, как правило, представляет собой плоский массив ячеек, в которых программа может читать и писать.Запущенная программа может использовать эти ячейки по своему усмотрению.Но есть еще что сказать.

1 ^ вещь.Куча полностью программная, в то время как стек также (или в основном) аппаратный.Большинство процессоров имеют аппаратное обеспечение (или инструкцию процессора) для поддержки стека, в то время как большинство (или все?) Не заботятся о куче.Еще больше: есть небольшие встроенные процессоры (или микроконтроллеры), которые имеют отдельную область стека - полностью отличную от других областей памяти, где программа может создать «кучу».

2 ^ вещь.Говоря о «программах», можно / нужно думать, что операционная система (ОС) - это программа, специализирующаяся на управлении ресурсами (включая память), и расширяемая с помощью «приложений» (которые являются программами),В таком сценарии управление стеком и кучей осуществляется совместно с операционной системой и приложениями.

Итак, чтобы ответить на ваш главный вопрос, правильный ответ на 90% следующий: в голом металле у вас уже есть стек - возможно,Вы должны выполнить небольшую инструкцию, чтобы настроить его, но это просто.Но у вас нет кучи, вы должны реализовать ее в своей программе.Сначала вы выделяете часть памяти для использования в качестве стека;и затем вы можете выделить больше памяти для использования в качестве кучи, не забывая, что вы должны сохранить немного памяти для обычных / статических данных.Часть программы, которая управляет кучей, должна знать, что делать, используя, но не ошибочно перезаписывая стек и статические данные, для выполнения своих функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...