Skip to content
On this page

函数执行的过程到底是怎么样的呢?

函数运行的过程(模型)

函数为会可以被其它函数调用?函数在被调用的过程中发生了什么?函数在内存是如何存储的?

我们可以这样理解:函数本身其时分为两个部分:

  • 代码部分
  • 局部变量部分

我们知道所有的代码在运行的时候都是在内存中的,如果一个函数被调用(执行)多次,那么是不是有多个代码部分存在内存中呢?答案:不是,代码部分相当于数学上的公式,而局部变量部分相当于代入公式的起始变量,所以如果起始变量不同,面对同样的公式,结果不同.那么为了节省不必要的内存浪费,肯定一个函数代码部分在内存中只有一个,但局部变量部分有多个.每一次调用函数都会产生一个新的局部变量部分.

我们有如下函数,那么函数add是怎么样运行的呢?

c
#include <cstdio>
int add(int a,int b){
   return a+b;
}

int main(){
   int a =1,b=2;
   int c =add(a,b);
   return 0;
}
1
2
3
4
5
6
7
8
9
10

函数的内存样式

0

调用栈概念

1

基于GDB的讲解-视频

cpp
#include <bits/stdc++.h>
using namespace std;

int calc(int a,int b,int c,int d,int f,int g,int h,int i){
    int sum = a+b+c+d+f+g+h+i;
    return sum;
}

int main(){
    int sum = calc(1,2,3,4,5,6,7,8);
    printf("%d\n",sum);
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

利用gdb -q -tui 1来调试上面的代码,说明调用的作用,函数如何运行