Я понимаю процесс выделения памяти для программ на C++. Согласно тому, что я получил из Интернета, для компиляторов C++ память выделяется для глобальных переменных и статических переменных во время компиляции. В то время как динамически создаваемые переменные (например, операции new/malloc) будут заданы в памяти только тогда, когда исполняемые файлы фактически запущены. Поправьте меня, если я ошибаюсь.Когда память выделена для программ?
Так верно ли, что если исполняемый файл никогда не выполняется, то часть памяти, ранее выделенная при компиляции времени для глобальных статических переменных, остается и остается в памяти до тех пор, пока компьютер не будет закрыт? Что делать, если мы выключим компьютер и перезагрузим его, а затем перезапустим исполняемые файлы? На этот раз процесс компиляции отсутствует, когда ОС выделяет память для глобальных статических переменных этой статической переменной &? Является ли он на этапе загрузки системы или когда исполняемый файл фактически выполняется?
Теперь этот вопрос распространяется на любую общую программу на ПК. Например, программа Microsoft Word. Мы не кодировали и не компилировали его сами, мы только что установили его из установочного пакета, поэтому в этой ситуации процесс компиляции не выполняется (или, возможно, процесс установки - это процесс компиляции). Предположим, что эти общие программы также нуждаются в пространстве в памяти для статических глобальных переменных &, когда ОС выделяет память для этих программ? Это когда мы включаем и загружаем ОС или когда исполняем исполняемые файлы этих программ? Если ОС загружает все эти статические переменные во время загрузки, это объясняет, почему процесс загрузки ОС занимает некоторое время, но, похоже, это пустая трата ресурсов памяти, если 90% программ, установленных в системе, не будут выполняется каждый раз, когда пользователь активирует и использует свой ПК.
Во время компиляции память не выделяется. Распределение памяти начинается с * времени выполнения *. – emlai
Я думал, что вопрос очевиден, и связан с программированием, если немного странно и наивно (но это нормально). Очевидно, за этим стоит задуматься, что больше, чем можно сказать по большинству вопросов здесь в эти дни. Гораздо лучше, чем «почему моя программа сбой». Возможно, я немного склонен. –
@JasonC: Он слишком широк. ОП должен читать книгу «Блум». Мы не можем преподавать, как работают компиляторы. Возможно, «задумались», но нулевые исследования. –