Исполнимый файл программы загружается для выполнения в основную (оперативную) память компьютера. При этом доступная программе память разделяется на четыре области (сегмента). Одна из этих областей отводится под программный код, вторая – под глобальные и статические (объявленные как static) данные программы, третья, организованная по принципу стека, – под локальные переменные ее функций, четвертая – это область динамической памяти, “куча” (heap), которая может быть использована для работы с данными, размер или необходимость которых заранее неизвестны.
Любое объявление переменной в программе предполагает резервирование для нее участка памяти компьютера. Память под глобальные и статические переменные программы резервируется в области данных на все время выполнения программы, под формальные параметры и локальные переменные функции – в стеке на время выполнения этой функции. Количество резервируемых байтов памяти определяется типом данных, указанным в объявлении. Байты памяти компьютера пронумерованы, номера этих байтов принято называть адресами, номер начального байта участка памяти, выделенного для переменной, – адресом переменной.