深入理解 Rust 中的栈与堆内存分配
1. 栈指针与函数调用
在程序起始阶段,栈指针的值为栈基地址,栈内的内容是未定义的,变量 x1 和 y1 也尚未定义。当系统调用 main 函数时,由于 main 函数没有参数且只有一个占用 4 字节的局部变量 k ,栈指针变为 base - 4 。
当首次调用 f1 函数时,因为 f1 函数有一个参数 x1 和一个局部变量 y1 ,每个占用 4 字节,栈指针变为 base - 12 。 y1 的创建和销毁不会改变栈指针,因为其合适的值在函数调用时就已设定。当 f1 函数终止时,栈指针恢复到调用该函数之前的值,即 base - 4 。
当调用 f2 函数时,栈指针会根据其参数 x2 的大小增加,变为 base - 8 。当第二次调用 f1 函数时,栈指针会像第一次调用时那样减少 8 字节,变为 base - 16 。随着 f1 、 f2 和 main 函数依次终止,栈指针会逐渐增加,先变为 <
超级会员免费看
订阅专栏 解锁全文
31

被折叠的 条评论
为什么被折叠?



