Читать книгу Ссылки и указатели в C++: от основ к безопасности и современному коду - - Страница 16
Статическая память вечные жители программы
ОглавлениеСтатическая память – это "фундамент" вашей программы, где живут данные, существующие от запуска до завершения. Представьте её как незыблемые стены дома: они строятся при постройке и рушатся только при сносе. Сюда относятся глобальные переменные (видны везде), статические локальные (видны только в функции, но живут вечно) и статические члены классов. Выделение происходит при загрузке программы (в сегментах .data для инициализированных и. bss для нулевых), освобождение автоматически ОС при exit.
Почему статическая? Потому что lifetime вся программа. Нет динамики, как в куче, но и нет автоматической "уборки" стека. Идеально для констант, кэшей или shared состояний. Но осторожно: глобальные источник "спагетти", статические локальные источник скрытого state, влияющего на реентерабельность.
Пример:
#include <iostream>
int global = 42; // Глобальная, статика
void func() {
static int localStatic = 10; // Статическая локальная, инициализируется раз
std::cout << localStatic++ << std::endl;
}
int main() {
func(); // 10
func(); // 11
return 0;
}