Мой преподаватель по ИТ сказал, что когда пространство выделяется для константы в C и C ++, выделяется только СТРОГО необходимое пространство: он сказал, что если мы сохраняем значение 12 в константе, для Например, будет выделено только 4 бита памяти.
Если это действительно то, что сказал инструктор, то для этого действительно нет оправдания.
Нет смысла Это связано с тем, что память почти всегда делится на 8-битные «ячейки», а также потому, что когда мы объявляем константу, мы также указываем ее тип, поэтому мы решаем, сколько памяти ей выделить. Любое мнение эксперта?
Ни стандарт C, ни языковой стандарт C ++ не дают никакого обоснования для утверждения, и на практике он не описывает реальные реализации.
Но на самом деле, условия, в которых заявлено требование, должны быть оспорены, прежде чем мы даже дойдем до этого. В C «константой» является буквенная цифра c или значение нулевого указателя, встречающееся в исходном коде. Реализация языка имеет свободу действий для алгебраического объединения констант, их кодирования в инструкции, а не в данные, и для выполнения других преобразований, которые фактически означают, что константа вообще не соответствует ни одному хранилищу. Там, где константы имеют соответствующее представление в оперативной памяти, это представление действительно связано с архитектурой системы, и я не знаю какой-либо современной компьютерной архитектуры, которая может адресовать хранилище в единицах, меньших восьми бит.
Если предположить, однако вместо того, чтобы инструктор был явно неправ, вместо этого было какое-то недопонимание, - это способ описания хранилища, состоящего из менее чем восьми бит: типы структур могут иметь элементы, называемые «битовыми полями» , которые имеют целочисленный тип и указанное количество битов. Пример:
struct example {
unsigned int two_bits:2;
};
Битовые поля сами по себе не адресуемы - вы не можете применять к ним оператор адреса (&
) - и язык признает, что их хранилище является частью одного или нескольких анонимные «адресуемые единицы хранения», которые обычно больше, но представление каждого члена поля битов структурного объекта определено как состоящее из определенного c количества битов, объявленных для него.