Stack, Heap на уровне железа

219
23 января 2018, 08:57

Хочу прояснить ситуацию про хранение и обработку данных в виде стека и хипа. Не могу уложить в уме, как работает данная система на уровне железа...

1. Heap - это пространство памяти на Жестком диске или ОЗУ? Возникает он во время JIT компиляции, где отсеиваются ссылочные типы и скидываются в хип или же статичен, как сборка в виде Exe-Шника?

2. Stack - Храниться в Хеше процессора или ОЗУ? Возникает только во время компиляции и после очищается?

Буду благодарен за линки на тех. литературу, где это можно прояснить. Спасибо.

P.S. Читаю Рихтера - CLR via C#, что сподвигло на данный вопрос.

Answer 1

Давайте попробую объяснить на пальцах.

Heap располагается в виртуальной памяти. Он не возникает во время JIT-компиляции (во время компиляции возникает только скомпилованный код), его запрашивает библиотека времени выполнения при старте программы. Пространство под heap не хранится в исполнимом файле, т. к. оно там просто не нужно (память всё равно пустая, зачем хранить нули?)

Stack располагается точно так же в виртуальной памяти. Он выделяется операционной системой каждому потоку автоматически. Когда программа стартует, создаётся главный поток, которому операционная система выделяет память под стек.

Главное отличие их -- в том, как они используются программой.

Виртуальная память для процесса выделяется при старте процесса и хранится то на диске, то в ОЗУ, и перемещается между ними менеджром виртуальной памяти. Механизм виртуальной памяти -- это то, что позвляет программам выделять больше памяти, чем у вас есть физической ОЗУ, и изолирует программы друг от друга, позволяя при падении одной программы не падать всей системе.

READ ALSO
Ошибка Web сервиса C#

Ошибка Web сервиса C#

При запуске уже опубликованной веб-службы получаю такую ошибку:

280
Модификаторы доступа - public, но только для некоторых классов

Модификаторы доступа - public, но только для некоторых классов

Модификатор доступа "public" даёт доступ к члену класса для всех других классовВозможно ли сделать член класса доступным только для некоторых...

287
Не работает задать Accept-Language в webbrowser c#

Не работает задать Accept-Language в webbrowser c#

Пробовал открыть некоторые сайты(facebook, openstreetmap, instagram) в webbrowser с передачей POST запросаПробовал различные варианты и языки

249
Что такое Hangfire? [требует правки]

Что такое Hangfire? [требует правки]

Что такое Hangfire? Можна на примере пожайлуста показать

298