动态栈中内存布局

动态栈中内存布局

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值