Страницы

Поиск по вопросам

среда, 3 октября 2018 г.

Как хранятся в памяти литералы?

Как хранятся в памяти литералы?
int main() { 5; 1.; ""; }


Ответ

С абстрактной точки зрения "в памяти" в языке С++ хранятся только lvalues. Из приведенных вами литералов только строковый литерал "" является lvalue, т.е. только он хранится в памяти.
Остальные литералы не являются lvalue и формально положения в памяти не имеют.

Фактически же целочисленные литералы обычно "встраиваются" в тот контекст, в котором они использованы. Они могут встроиться непосредственно в сгенерированную машинную команду (то есть стать частью кода, а не данных программы), а могут вообще неузнаваемо трансформироваться или бесследно раствориться в этом контексте: умножение на 8 может замениться на сдвиг влево на 3 разряда, а присваивание переменной значения 0 может замениться на машинную инструкцию обнуления.
Что произойдет с литералом с плавающей точкой — зависит от способностей компилятора и особенностей подлежащей машинной платформы. На платформе x86 в общем случае плавающий литерал действительно будет храниться в памяти, т.е. для его хранения будет заведена внутренняя переменная. В то же время компилятор вправе распознавать "особенные" плавающие константы (0.0, 1.0 и т.д.) и реализовывать их неявным образом. Но, еще раз, в любом случае на уровне языка плавающий литерал положения в памяти не имеет.

Комментариев нет:

Отправить комментарий