程序中的栈

栈是现代计算机程序里最为重要的概念之一;
栈在程序中用于维护函数调用上下文;
函数中的参数和局部变量存储在栈上;

栈保存了一个函数调用所需的维护信息

函数调用过程

每次函数调用都对应着一个栈上的活动记录
–调用函数的活动记录位于栈的中部;
–被调函数的活动记录位于栈的顶部;

函数调用的栈变化

1、从main()开始运行

2、当main()调用f()

3、当从f()调用中返回main()

函数调用栈上的数据
函数调用时,对应的栈空间在函数返回前是专用的;
函数调用结束后,栈空间将被释放,数据不再有效;

指向栈数据的指针,示例如下:

#include <stdio.h>int* g()
{int a[10] = {0};return a;
}void f()
{int* pointer = g();
}int main()
{f();return 0;
}

程序中的堆

堆是程序中一块预留的内存空间,可由程序自由使用;
堆中被程序申请使用的内存在被主动释放前将一直有效;

程序中的堆

C语言程序中通过库函数的调用获得堆空间
-头文件: malloc.h;
- malloc --以字节的方式动态申请堆空间;
- free --将堆空间归还给系统;

系统对堆空间的管理方式
―空闲链表法,位图法,对象池法等等

程序中的静态存储区

静态存储区随着程序的运行而分配空间;
静态存储区的生命周期直到程序运行结束;
在程序的编译期静态存储区的大小就已经确定;
静态存储区主要用于保存全局变量和静态局部变量;
静态存储区的信息最终会保存到可执行程序中;

示例如下

#include <stdio.h>int g_v = 1;static int g_vs  = 2;void f()
{static int g_vl = 3;printf("%p\n", &g_vl);
}int main()
{printf("%p\n", &g_v);printf("%p\n", &g_vs);f();return 0;
}

小结

栈,堆和静态存储区是程序中的三个基本数据区
一栈区主要用于函数调用的使用
一维区主要是用于内存的动态申请和归还
一静态存储区用于保存全局变量和静态变量

C语言进阶第39式:程序中的三国天下相关推荐

  1. 第39课 程序中的三国天下

    程序中的栈: 函数调用过程: 函数调用栈的变化: ebp的作用就是用来进行函数调用的返回的. 函数返回仅仅是修改了esp指针,栈中的数据不会立即改变. 函数调用栈上的数据: g返回后,a数组的数据已经 ...

  2. C基础第39课--程序中的三国天下--栈,堆,静态存储区

    学习自狄泰软件学院唐佐林老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记. 栈是一种行为,后进先出的行为. 在函数调用的过程中,会在内存中维护类似上图的一个活动记录.那么以什么样的方式来维护 ...

  3. C语言进阶:程序中的三国天下 考研数据结构

    C语言笔记 第三十九课 程序中的三国天下 C语言笔记 第三十九课 程序中的三国天下_YLC_慕类的博客-CSDN博客 C基础第42课 -- 内存操作经典问题分析二 C基础第42课 -- 内存操作经典问 ...

  4. C语言笔记 第三十九课 程序中的三国天下

    第三十九课 程序中的三国天下 程序中的栈 栈是现代计算机程序里最为重要的概念之一 栈在程序中用于维护函数调用上下文 函数中的参数和局部变量存储在栈上 栈是一种行为,一种先进后出的行为 栈保存了一个函数 ...

  5. C语言-第30课 - 程序中的三国天下

    第30课 - 程序中的三国天下 一. 概念 内存基本构成     可编程内存在基本上分为这样的几大部分:静态存储区.堆区和栈区.他们的功能不同,对他们使用方式也就不同.     静态存储区:内存在程序 ...

  6. 【C】39.程序中的三国天下

    程序中的三国天下是介绍: 栈, 堆, 静态存储区 栈区 主要保存函数调用时所需要的参数信息.局部变量等信息,还包括一些看不到的返回地址,寄存器信息等等(可以说没有栈程序就没法运行).栈就是一种行为,后 ...

  7. 38、程序中的三国天下

    1.程序中的栈 栈是现代计算机程序里最为重要的概念之一(这个栈和数据结构里面的栈概念上一样,表现形式上不一样) 栈在程序中用于维护函数调用上下文 函数中的参数和局部变量存储在栈上 注: 1.栈:就是一 ...

  8. 第30节 程序中的三国天下

    -------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删. 第一: 程序中的栈 ?  栈是现代计算机程序里最为重要的概念之一 ?   ...

  9. 【C深入】程序中的三国天下,栈,堆,静态内存

    1 栈 1.1 程序中的栈 栈是现代计算机程序里最重要的概念之一. 栈在程序中用于维护函数调用上下文. 函数中的参数和局部变量存储在栈上. 栈是一种后进先出的行为. 1.2 函数调用过程 栈保存了一个 ...

最新文章

  1. PostgreSQL 消息平台实践
  2. 第五章Bookstrap
  3. 618 兵临城下,你需要一个更省钱省力的数据根基平台!
  4. golang goroutine协程概念及入门:轻量级线程(或用户态线程)
  5. Oracle Caused by: java.sql.SQLException: sql injection violation, syntax error: syntax error, expect
  6. android jni通过cmake使用第三方静态库和动态库
  7. php金额,PHP 如何处理金额
  8. SQL读书笔记SQL操作语句
  9. 一对一直播app大热,使用源码或自主开发一对一APP需要了解哪些技术?
  10. 聊聊编码那些事——Unicode,gb2312,cp936,GBK,GB18030
  11. Android 启动性能、启动性能分析以及常见的启动性能问题分类
  12. linux中find查找文件和查找文件内容
  13. 客服坐席聊天页面html,WebSocket实现简单客服聊天系统
  14. 服务器C盘内存不足,发现C盘TEMP文件夹占用44G
  15. 用java实现首字母大写_java实现每个单词首字母大写
  16. 网站文章采集与伪原创技巧
  17. JBAS011232: Only one JAX-RS Application Class allowed. com.sun.jersey
  18. 详细解读Windows8.1 Update中的WIMBoot新特性
  19. 【Unity Assetstore】上传插件
  20. 鼠标滚轮滚动切换内容

热门文章

  1. 护眼灯到底有没有用?2022专业护眼台灯选哪个牌子好
  2. Maven 之 settings.xml 文件详解
  3. 云计算 + AI + 遥感卫星,人类对地探测进入黄金时代
  4. AssionShop开源B2C电子商务系统-(一)用例图
  5. 蓝桥六届 打印大X JAVA
  6. 全功能音视频互动开发平台
  7. 图像处理计算机考试,计算机图形图像处理试题(A)(含答案).doc
  8. hackinglab-脚本关5——逗比验证码第一期
  9. Three.js 教程
  10. shell: mysql删除183天前的table(保留半年的log数据)