动态栈中内存布局
1.1进程中内存布局
1.2 函数调用中栈内存
Main()->int print_out(int begin, int end)调用栈
函数调用时:
Main函数首先压入:print_out的实参1,2;接受返回值的地址(如果没有返回值?),main的ebp
print_out的Ebp =(main)Esp,Esp后移动建立新print_out函数栈
1.3函数栈中变量的位置(ubuntu/android)
1.普通局部变量
不同类型的变量,由定义的位置顺序,从地址高到底排列
int a |
b... |
编译器优化
有数组的情况
int d[1]...d[0] |
int b[1] |
int b[0] |
int a |
char *c |
Ubuntu上的规则
相同类型普通变量,相邻分配,分配地址与定义顺序相反
数组在全部在高位地址,相同类型数组相邻,并分配地址与定义顺序相反。
2.if/switch等有作用域/生命周期 局部变量位置
与普通全局变量相同,以相同的规则穿插在普通变量的地址中间
(不同区的if中的局部变量,可能会共用地址)
有Class/Struct的情况
Class对象在定义变量的穿插,可能再array之前
3.for中定义的局部变量,每次循环地址不变