Можно ли с уверенностью сказать, что переменные примитивных типов, таких как: char
, short
, int
, long
и long long
, всегда будут храниться в ОЗУ с учетом его размера?
Теоретически RAM не требуется для C ++.
Поскольку C ++ 11 - это спецификация , написанная на английском языке sh (в n3337 ), и этот стандарт даже не упоминает RAM. Насколько я понимаю C ++ 11, реализация C ++ может (в принципе) работать на механических компьютерах, как гипотетический расширенный вариант Аналитической машины Бэббиджа , и такой компьютер не имеет Модуль DRAM .
На практике большинство процессоров хранят переменную в ОЗУ, но обратите внимание, что UEFI или B IOS материнской платы (например, некоторые Asus ROG STRIX TRX40-E ), вероятно, написаны в основном на C или C ++ и могут работать без модулей DRAM (используя только процессор кеш-память ЦП ). Посмотрите также на coreboot .
Большинство оптимизирующих компиляторов (например, последние G CC, вызываемые как g++ -Wall -Wextra -g -O3
) будет стараться удерживать автоматические c переменные в регистрах процессора .
Например, long long
будет сохранено с использованием 8 байтов, даже если это значение равно 15.
Скорее всего, да, но тогда вам следует использовать стандартный std::int64_t
тип .
Наконец, большинство программ на C ++ работать под управлением некоторой операционной системы с поддержкой виртуальной памяти , а иногда переменная даже не находится внутри ОЗУ (просто в области подкачки некоторого диска).