Хотя стандарт не требуется, локальные переменные универсально расположены в стеке программ.
Когда вы вводите функцию, одно из первых сделано для уменьшения указателя стека, чтобы предоставить пространство для локальных переменных.
SUBL #SOMETHING, SP
Где НЕЧТО является количество требуемого пространства и SP является регистр указателя стека .. В первом примере, НЕЧТО, вероятно, 13. Тогда адрес:
f is 0(SP)
e is 1(sp)
b is 5(sp)
a is 9(sp)
Я предполагаю, что ваш компилятор не выровнял указатель стека. Часто они давая что-то подобное:
f is 3(SP)
e is 4(sp)
b is 8(sp)
a is 12(sp)
И НЕЧТО будут округлены до 16 на 32-битной системе.
Возможно, вам захочется сгенерировать сборку, используя ваш компилятор, чтобы посмотреть, что происходит внизу.
Память не выделена для переменных, не используемых в программе?
Обратите внимание, что для локальной переменной памяти на самом деле не выделено. Переменная временно привязана к местоположению в стеке программы (стек не требуется стандартом, но как это делается в большинстве случаев). Поэтому исходное значение переменной не определено. Это могло быть связано с чем-то еще ранее.
Компилятору не нужно резервировать место для переменных, которые не используются. Их можно оптимизировать. Как правило, существуют параметры компилятора, чтобы указать, не делать это для отладки.
Почему адреса распределены в порядке убывания. ex-it идет от 2293324 до 2293320?
Программные стеки обычно растут вниз. Начиная с давних дней, программа будет находиться в нижней части адресного пространства, куча выше этого и стек на противоположном конце.
Куча будет расти в направлении более высоких адресов. Стек будет расти в сторону кучи (более низкие адреса).
В то время как адресные пространства могут быть более сложными, чем в наши дни, рост стеков вниз снизился.
Нет особого требования, чтобы компилятор отображал переменные в стек в порядке убывания, но есть вероятность 50/50, что так оно и будет.
Сделайте себе одолжение и используйте '% p' при печати адресов. – WhozCraig
1) Зависит от оптимизаций, выполняемых компилятором 2) Зависит от компилятора. – mascoj
Где находится C++? – KABoissonneault