C++对象模型(18)-- 函数语义学:函数调用过程

1、栈帧结构

函数执行是通过系统栈来实现的,系统栈分为若干个栈帧。

栈帧就是函数运行的环境,每个函数在被调用时都会在系统栈区形成一个叫栈帧的结构。一次函数调用相关的数据保存在栈帧中,比如函数参数、函数的局部变量、函数执行完后的返回地址等数据。栈帧里的数据是先进后出的。

栈帧由以下几部分组成:

(1)函数参数

(2)局部变量

(3)返回地址

(4)ebp: 栈基指针存储器、esp: 栈顶指针存储器

C++对象模型(18)-- 函数语义学:函数调用过程_第1张图片

2、函数调用时的栈帧结构

假如函数的定义:

int func(int i, int j) {
    int m;
    m = i + j;

    return m;
}

int main()
{
    int ret;
    ret = func(1, 2);
    
    return 0;
}

在main()函数中调用func()函数时的栈帧结构如下:

C++对象模型(18)-- 函数语义学:函数调用过程_第2张图片

每调用一个函数,就会往下添加新的栈帧,当函数调用结束时,把返回值保存到返回地址,同时弹出相应的栈帧。

具体调用过程可分成下面几步:

(1)在main函数中调用func函数,func函数进入栈帧。

C++对象模型(18)-- 函数语义学:函数调用过程_第3张图片

(2)在func函数中,把i+j的值赋给变量m,然后把m值返回给main函数中的ret。

C++对象模型(18)-- 函数语义学:函数调用过程_第4张图片

(3)把func函数的栈帧出栈

你可能感兴趣的:(C++对象模型,c++,对象模型,函数调用,栈帧)