动态栈中内存布局

来源:互联网 发布:电脑图片查看软件 编辑:程序博客网 时间:2024/06/16 20:07

动态栈中内存布局

1.1进程中内存布局



1.2 函数调用中栈内存

Main()->int print_out(int begin, int end)调用栈


函数调用时:

Main函数首先压入:print_out的实参1,2;接受返回值的地址(如果没有返回值?),mainebp

print_outEbp =(main)EspEsp后移动建立新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中定义的局部变量,每次循环地址不变

0 0
原创粉丝点击