2012-01-27 3 views
0

Мы знаем, что когда функция называется блоком памяти, вставляется в стек, и когда функция заканчивает свое задание, теперь выдается блок памяти, который был нажат ранее. Правильно ли это во всех обстоятельствах. Даже если функция содержит объявление статических переменных? Если да, то как статические переменные сохраняют свои значения? Являются ли они зарезервированы для хранения памяти в куче, а не в стеке?Каково пространство памяти для статической переменной, объявленной внутри функции?

+0

Я не знаю, что такое .bss и .data и как они связаны с кучей и стека. – bubble

+1

Возможный дубликат [Статическая и глобальная переменная в памяти] (http://stackoverflow.com/questions/2421254/static-and-global-variable-in-memory) вместе с тоннами других. Обратите внимание на все «связанные» вопросы в правой части экрана. –

+0

@Brian ответ на этот вопрос конкретно не говорит, если статические переменные назначаются в кучу. Также мне хотелось бы, чтобы кто-нибудь мог ссылаться на любую доверенную ссылку – bubble

ответ

3

Статические локальные переменные не живут в стеке, они живут в той же памяти, что и глобальная переменная. .bss - это память, в которой будут находиться глобальные переменные, которые неинициализированы. .data могут содержать переменные, объявленные с начальным значением.

+0

Могу я просто сказать, что им присваивается пространство памяти в куче. Или есть что-то, что отличает кучу, а .bss и .data – bubble

+0

куча обычно относится к пространству, используемому для динамического распределения через malloc, поэтому нет, ваша статическая переменная не будет потреблять пустое место – TJD

+0

, поэтому вы имеете в виду, что существует 3 или более типов пространств памяти , Куча, стек и тот, в котором глобальным или статическим переменным присваивается пространство. Я прав ? – bubble

2

Объект, объявленный с ключевым словом static, имеет статическую продолжительность хранения. Объект со статической продолжительностью хранения не освобождается, когда выполнение выходит из блока, где он определен. Время жизни статического объекта - это время жизни программы: объект создается при запуске программы и уничтожается при выходе из программы.

+0

ya, но мой вопрос здесь о пространстве, которое он потребляет, а не о времени – bubble

+2

@bubble это не указано языком, поскольку язык не требует стека. Однако при реализации со стеком объект 'static' обычно просто не сохраняется в стеке. В Unix вы можете ожидать, что объекты 'static' будут храниться в .bss, .data или .rodata. – ouah

Смежные вопросы