Почему память элементов данных структуры распределена от более низкого к более высокому адресу в стеке, растущем выше, чтобы понизиться? Каков механизм в этом процессе?Почему память элементов данных структуры распределена от более низкого к более высокому адресу в стеке, растущая выше до более низкого?
ответ
Одним из преимуществ является то, что операционная система может легко проверить, происходит ли переполнение в процессе (программе). Сегмент кучи обычно растет от более низкого до более высокого, когда стек растет от более высокого к более низкому. если два сегмента постепенно растут, чтобы перекрываться, ОС может обнаружить переполнение в процессе.
Вот схема расположения памяти программ C. Надеюсь, эта помощь.
Кроме того, такой выбор зависит от дизайнера OS. Если вы новичок, просто не волнуйтесь. Подумайте легко.
Стек обычно является единственным, что растет вниз, в то время как все остальное растет вверх. Однако структура в стеке такая же, как и одна и та же структура в куче: область памяти, идентифицируемая адресом его первого байта в памяти, и механизм заполнения одинаковый.
Итак, интересный вопрос заключается не в том, «почему структура в стеке заполнена вверх», а «почему стек растет вниз?».
Ответ прост: поскольку стек растет вниз, а объекты на нем идентифицируются по адресу их первого байта, указатель стека всегда указывает на первый элемент в стеке.
Это может показаться тривиальным, но это упрощает ситуацию на уровне машины. Например, на PowerPC была инструкция, которая сохраняет значение со смещением указателя и обновляет этот же указатель на вычисленный адрес. Эта инструкция может атомарно распределять весь стек стека и связывать его с предыдущим фреймом стека, и он не будет работать наоборот. (Я надеюсь, что это было не слишком много технических деталей ...)
Поведение роста стека зависит от окружающей среды. Структурный порядок задается стандартом. – dmckee