Это может показаться неприятным, но ... многие из них говорят о «памяти, выделенной компилятором»: на самом деле это не так: память предоставляется ОС процессу, выполняющему программу, а не компилятору.
Компилятор, фактически, сохраняет литералы в части исполняемого файла, смещение которой становится известным компоновщику, который передает эти смещения "функции запуска".Когда программа «запускается», ОС загружает файл в память, добавляет все смещения к адресу загрузки, таким образом, преобразуя все смещения в адреса, создает «стек», чем вызывает функцию запуска.Функция запуска создает кучу, вызывает все конструкторы глобальных и статических объектов и вызывает main.На данный момент "Check"
- это просто последовательность байтов, начинающаяся с данного адреса.Этот адрес присваивается str
.
Следовательно, память не "выделяется компилятором".Он выделяется на этапе запуска программы и инициализируется данными, ранее сохраненными компилятором.