第39课 程序中的三国天下

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第39课 程序中的三国天下相关的知识,希望对你有一定的参考价值。

程序中的栈:

技术分享图片

 

 

技术分享图片

函数调用过程:

技术分享图片

 

函数调用栈的变化:

技术分享图片

 

 

技术分享图片

ebp的作用就是用来进行函数调用的返回的。

技术分享图片

 

函数返回仅仅是修改了esp指针,栈中的数据不会立即改变。

函数调用栈上的数据:

技术分享图片

 

g返回后,a数组的数据已经没有意义了。

示例:

技术分享图片

 

g返回后,a中的数据就会改变了,示例如下;

技术分享图片

 

第23行调用printf时已经将栈中a数组的数据破坏了。

 

程序中的堆:

技术分享图片

 

 

技术分享图片

堆的管理:

技术分享图片

 

程序中的静态存储区:

技术分享图片

 

全局变量和静态局部变量最终都会保存到静态存储区。静态存储区的信息最终保存在可执行程序当中,例如静态存储区的大小信息,从什么地方开始到什么地方结束,这些都会保存在exe或者.out可执行程序里面。

示例:

#include <stdio.h>

int g_v = 1;

static int g_vs  = 2;

void f()
{
    static int g_vl = 3;
    
    printf("%p
", &g_vl);
}

int main()
{
    printf("%p
", &g_v);
    
    printf("%p
", &g_vs);
    
    f();
    
    return 0;
}

运行结果如下:

技术分享图片

 

可以看到这三个变量放在了一起。

静态数据的大小与位置在编译期就确定了。

小结:

技术分享图片

 

以上是关于第39课 程序中的三国天下的主要内容,如果未能解决你的问题,请参考以下文章

品三国论国产RISC-V芯片天下大势

第39课 Qt中的事件处理(下)

三国群英传8怎么开隐藏时期

2022年 《三国演义》手摘

第0-0课 - 引言

国内好用的邮箱评选,电子邮箱大全有你的吗?