Хочу прояснить ситуацию про хранение и обработку данных в виде стека и хипа. Не могу уложить в уме, как работает данная система на уровне железа...
1. Heap - это пространство памяти на Жестком диске или ОЗУ? Возникает он во время JIT компиляции, где отсеиваются ссылочные типы и скидываются в хип или же статичен, как сборка в виде Exe-Шника?
2. Stack - Храниться в Хеше процессора или ОЗУ? Возникает только во время компиляции и после очищается?
Буду благодарен за линки на тех. литературу, где это можно прояснить. Спасибо.
P.S. Читаю Рихтера - CLR via C#, что сподвигло на данный вопрос.
Давайте попробую объяснить на пальцах.
Heap располагается в виртуальной памяти. Он не возникает во время JIT-компиляции (во время компиляции возникает только скомпилованный код), его запрашивает библиотека времени выполнения при старте программы. Пространство под heap не хранится в исполнимом файле, т. к. оно там просто не нужно (память всё равно пустая, зачем хранить нули?)
Stack располагается точно так же в виртуальной памяти. Он выделяется операционной системой каждому потоку автоматически. Когда программа стартует, создаётся главный поток, которому операционная система выделяет память под стек.
Главное отличие их -- в том, как они используются программой.
Виртуальная память для процесса выделяется при старте процесса и хранится то на диске, то в ОЗУ, и перемещается между ними менеджром виртуальной памяти. Механизм виртуальной памяти -- это то, что позвляет программам выделять больше памяти, чем у вас есть физической ОЗУ, и изолирует программы друг от друга, позволяя при падении одной программы не падать всей системе.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Модификатор доступа "public" даёт доступ к члену класса для всех других классовВозможно ли сделать член класса доступным только для некоторых...
Пробовал открыть некоторые сайты(facebook, openstreetmap, instagram) в webbrowser с передачей POST запросаПробовал различные варианты и языки