栈的增长方式有两种:向上 和 向下
为什么栈会有两种增长方式?
一般程序的变量都是从RAM的低地址开始分配的,变量从低地址开始分配的原因是很明显的,它可以在RAM容量增大时不用从新编译程序。早期的计算机系统的内存容量有限,将堆栈设计成从高地址向低地址增长,可以有限地利用所有的内存容量;同时在变量数目改变的时候,可以保持堆栈的起始地址不变。
现今内存容量变得越来越大,上述的安排就变得逐渐失去了意义;今天即使可以使用从低地址向高地址增长的堆栈,但应该很少会有人用,人们已经习惯成自然了。
c++的一种测试方法:
#include <stdio.h>
void foo(int num) {
printf(“%p\n”, (void*)&num);
if (!num) foo(1);
}
int main(void) {
foo(0);
return 0;
}
第二次的值小于第一次的。
即用递归的方式对函数的参数压栈,然后输出不同层的地址,即可得出栈的增长方向。
ref: