1.9Kпросмотров
8.8%от подписчиков
20 марта 2026 г.
questionScore: 2.1K
🍿 Почему локальные переменные «бесплатны» — и что на самом деле происходит при их создании? Большинство разработчиков знают, что локальные переменные живут на стеке. Но мало кто задумывается: что значит «выделить память на стеке»? Спойлер — никакого malloc там нет. 🔍 Механизм Стек — это непрерывный блок памяти, закреплённый за потоком при его запуске (обычно 1–8 МБ). Управление им сводится к одному регистру — rsp (stack pointer). При входе в функцию компилятор заранее вычисляет суммарный размер всех локальных переменных и генерирует одну инструкцию: sub rsp, 48 ; "выделить" место под все локалы сразу ; 48 - смещение в байтах, на которое ; нужно сдвинуть указатель, чтобы ; выделить память под переменные Никакого поиска свободного блока. Никакого обращения к ОС. Одна арифметическая операция над регистром. ⚡️ При выходе из функции add rsp, 48 ; "освободить" — снова одна инструкция Данные никуда не деваются физически — они просто становятся «за пределами» стека. Следующий вызов функции затрёт их своими данными. ❗️ Почему это важно Аллокация на стеке — это O(1) по времени и нулевые накладные расходы на освобождение. Именно поэтому int x = 5; внутри функции принципиально дешевле new int(5) — разница не в синтаксисе, а в том, какой механизм памяти задействован. ✏️ Если видишь узкое место с частыми мелкими аллокациями — сначала спроси: можно ли это положить на стек? 📍Навигация: Вакансии • Задачи • Собесы Библиотека C/C++ разработчика #под_капотом
1.9K
просмотров
1530
символов
Нет
эмодзи
Нет
медиа

Другие посты @cppproglib

Все посты канала →