在调用子例程的Linux(或其他操作系统)过程中,局部变量的内存来自进程的堆栈区域。任何动态分配的内存(使用malloc,new等)都来自进程的堆区域。在递归期间,函数调用期间从堆栈区域分配本地内存,并在执行完函数后清除。
内存被表示为最低地址在最低处,最高在最高处。以下是使用快速C代码在递归中查找堆栈增长方向的步骤。
#include <stdio.h>
void test_stack_growth_direction(recursion_depth) {
int local_int1;
printf("%p\n", &local_int1);
if (recursion_depth < 10) {
test_stack_growth_direction(recursion_depth + 1);
}
}
main() {
test_stack_growth_direction(0);
}
出放在MAC
0x7fff6e9e19ac
0x7fff6f9e89a8
0x7fff6f9e8988
0x7fff6f9e8968
0x7fff6f9e8948
0x7fff6f9e8928
0x7fff6f9e8908
0x7fff6f9e88e8
0x7fff6f9e88c8
0x7fff6f9e88a8
0x7fff6f9e8888
输出ubuntu上
0x7ffffeec790c
0x7ffffeec78dc
0x7ffffeec78ac
0x7ffffeec787c
0x7ffffeec784c
0x7ffffeec781c
0x7ffffeec77ec
0x7ffffeec77bc
0x7ffffeec778c
0x7ffffeec775c
0x7ffffeec772c
堆栈是在这些具体设置向下生长作为存储器地址被减少。这取决于系统的体系结构,并可能对其他体系结构具有不同的行为。 0x7fff6f9e8868