mrjbom
@mrjbom

Где в памяти располагаются переменные и массивы?

Случай первый: Если я размещу полностью неинициализированный массив в теле функции, то где он будет размещён?
Я думаю, что он будет размещён целиком в стеке.

Случай второй: Если я размещу полностью неинициализированный массив вне функции, то где он будет размещён?
Я думаю, что он будет размещён в BSS секции, но вне стека.

Случай пятый: Если я размещу частично инициализированный массив в функции, то где будут размещены инициализированная и неинициализированная части?
Я думаю, что инициализированная часть будет располагаться в секции data/rodata, а инициализированная часть в стеке?

Случай четвёртый: Если я размещу частично инициализированный массив вне функции, то где будут размещены инициализированная и неинициализированная части?
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
@skyazimuth
1 обычные неинициализированные переменные в функции размещаются на стеке. Если есть возможность, могут быть размещены в регистрах. При ключевом слове static размещается в bss. При ключевом слове const размещается в rodata. То же касается и массивов, разве что в регистрах вряд ли разместятся (хотя, мало ли какие архитектуры могут быть).
2 глобальные неинициализированные массивы размещаются в bss, const - в rodata.
5 массив будет храниться на стеке, при входе в функцию инициализироваться данными из rodata. Массивы неразрывные и однородные, его части не могут быть разного типа хранения. Тут тоже надо иметь в виду, что const будет лежать в rodata, static - в data
4 как сказал, массив однородный и неразрывный, глобальный инициализированный будет весь в data.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы