Другие языки программирования и технологии

C++ Статическая память

Всем привет!
Автоматическая память хранит данные в стеке.
Динамическая - в куче.
Я верно понял?
А статическая?
Автоматическая - выделяется на стеке (в оперативной памяти) у запущенной программы при переходе в соответствующую область видимости, например, функцию, или блок, выделенный фигурными скобками.

Динамическая - выделяется в куче (в оперативной памяти) у запущенной программы с помощью вызова функций malloc, new (или LocalAlloc/GlobalAlloc в WinApi).

Статическая - выделяется компилятором на этапе компиляции программы (например, в секции данных .data) и хранится в исполняемом файле (например, .exe после линковки в Windows), т. е. хранится на диске незапущенной программы (в постоянной памяти). А при запуске программы необходимые секции исполняемого файла операционная система загружает в оперативную память (т. е. это происходит перед запуском исполняемого кода). Соответственно, перед запуском исполняемого кода вся статическая память уже загружена в оперативную операционной системой.
Вячеслав Васильев
Вячеслав Васильев
1 647
Лучший ответ
Проверь где скомпилировав программу :)
Видно, что в данных таких же, то бишь статика или нет все от компилятора зависит и для статики он делает обращение по адресу в данных.
Василий Кузнецов В самом коде программы? Как литерал?
Статика захардкожена в r/w секции файла. Именно поэтому, их нельзя использовать в рекурсии и в мульти-потоке. Ибо данные затираются.
Автоматические переменные выделяются на стеке, поэтому в рекурсии раскодуется стек, но пока он есть, всё в порядке. В куче - вообще нет проблем, главное, чтобы утечек не было. А вот статика - это значение, которое сохраняется между вызовами.

Кстати, глобальные переменные тоже из кучи.
>Автоматическая память хранит данные в стеке.
int a; да

>Динамическая - в куче.
int* a = new int; да

>А статическая?
static int a[200];
В файле вшито или на стеке
В секции данных, как и глобальные переменные...
Дима Коваль
Дима Коваль
8 452