2013-06-30 5 views
0

Почему память элементов данных структуры распределена от более низкого к более высокому адресу в стеке, растущем выше, чтобы понизиться? Каков механизм в этом процессе?Почему память элементов данных структуры распределена от более низкого к более высокому адресу в стеке, растущая выше до более низкого?

+0

Поведение роста стека зависит от окружающей среды. Структурный порядок задается стандартом. – dmckee

ответ

0

Одним из преимуществ является то, что операционная система может легко проверить, происходит ли переполнение в процессе (программе). Сегмент кучи обычно растет от более низкого до более высокого, когда стек растет от более высокого к более низкому. если два сегмента постепенно растут, чтобы перекрываться, ОС может обнаружить переполнение в процессе.

Вот схема расположения памяти программ C. Надеюсь, эта помощь.

enter image description here

Кроме того, такой выбор зависит от дизайнера OS. Если вы новичок, просто не волнуйтесь. Подумайте легко.

0

Стек обычно является единственным, что растет вниз, в то время как все остальное растет вверх. Однако структура в стеке такая же, как и одна и та же структура в куче: область памяти, идентифицируемая адресом его первого байта в памяти, и механизм заполнения одинаковый.

Итак, интересный вопрос заключается не в том, «почему структура в стеке заполнена вверх», а «почему стек растет вниз?».

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

Это может показаться тривиальным, но это упрощает ситуацию на уровне машины. Например, на PowerPC была инструкция, которая сохраняет значение со смещением указателя и обновляет этот же указатель на вычисленный адрес. Эта инструкция может атомарно распределять весь стек стека и связывать его с предыдущим фреймом стека, и он не будет работать наоборот. (Я надеюсь, что это было не слишком много технических деталей ...)