К моему лучшему пониманию, стек предположительно будет расти вниз.Увеличивает ли мой стек вверх, а не вниз?
Я попытался запустить этот код:
#include<stdio.h>
void func(char* a1, int a2, int a3) {
char b1[10];
int b2;
int b3;
printf("a3 address is: %p\n", &a3);
printf("a2 address is: %p\n", &a2);
printf("a1 address is: %p\n", &a1);
printf("-----------------------\n");
printf("b1 address is: %p\n", &b1);
printf("b2 address is: %p\n", &b2);
printf("b3 address is: %p\n", &b3);
}
int main() {
func("string",2,3);
return 0;
}
И результат не был, как я ожидал:
a3 address is: 0x7fff68473190
a2 address is: 0x7fff68473194
a1 address is: 0x7fff68473198
-----------------------
b1 address is: 0x7fff684731b0
b2 address is: 0x7fff684731a8
b3 address is: 0x7fff684731ac
Я не ожидаю b1
, b2
, b3
заказываются в том же Я объявил их. Я понимаю, что компилятор может изменить этот порядок, чтобы включить оптимизацию и выравнивание, но почему кажется, что стек растет по направлению к высоким адресам, а не к более низким адресам?
Вы сравнение переменных в пределах одного фрейма стека, а не отдельные стеки рама ... –