第三十九课 程序中的三国天下

程序中的栈

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

栈是一种行为,一种先进后出的行为
栈保存了一个函数调用所需的维护信息

函数调用过程

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

函数调用的栈变化一

从main()开始运行,esp栈顶指针

函数调用的栈变化二

当main()调用f()

函数调用的栈变化三

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

数据调用栈上的数据

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

39-1 指向栈数据的指针
不要返回局部变量的地址

程序中的堆

堆是程序中一块预留的内存空间,可由程序自由使用
堆中被程序申请使用的内存在被主动释放前将一直有效
为什么有了栈还需要堆?
栈上的数据在函数返回后就会被释放掉,无法传递到函数外部,如:局部数组
C语言程序中通过库函数的调用获得堆空间
头文件:malloc.h
malloc – 以字节的方式申请堆空间
free – 将堆空间归还给系统
系统对堆空间的管理方式
空闲链表法,位图法,对象池法等等

程序中的静态存储区

静态存储区随着程序的运行而分配空间
静态存储区的生命周期直到程序运行结束
在程序的编译期静态存储区的大小就已经确定
静态存储区主要用于保存全局变量和静态局部变量
静态存储区的信息最终会保存到可执行程序中
39-2 静态存储区的验证
小结
栈,堆和静态存储区是程序中的三个基本数据区
栈区只有用于函数调用的使用
堆区主要是用于内存的动态申请和归还
静态存储区用于保存全局变量和静态变量

C语言笔记 第三十九课 程序中的三国天下相关推荐

  1. Slicer学习笔记(三十九)slicer中Markups模块

    Slicer学习笔记(三十九)slicer中Markups模块 1.概念 1.1.Markups模块简介 1.2.应用方向 1.3.界面面板 1.Markups List 2.Buttons And ...

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

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

  3. C语言笔记 第三十五课 数组参数和指针参数分析

    第三十五课 数组参数和指针参数分析 思考:为什么C语言中的数组参数会退化为指针? 退化的意义 C语言中只会以值拷贝的方式传输参数 当向函数传递数组时:(错误的,设计当初的思路) 将整个数组拷贝一份传入 ...

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

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

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

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

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

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

  7. NeHe OpenGL第三十九课:物理模拟

    NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切.   物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇 ...

  8. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  9. JavaScript学习(三十九)—对象中内容的操作

    JavaScript学习(三十九)-对象中内容的操作 一.对象中内容的操作:增.删.改.查 (一).增:给对象添加属性或者方法 1)方式1:对象名称.属性名=属性值: 2)方式2:对象名称['属性名' ...

最新文章

  1. java 图片处理 图片缩略图,java怎么生成图片缩略图,缩小图片,高清图片缩小
  2. OAuth2.0文档
  3. python怎么自动中文版_Python实现AI自动版贪吃蛇
  4. antd table 时间搜索_antd table按表格里的日期去排序操作
  5. android 网卡监听,Android实时监听网络的变化
  6. GitHub 2017 年度报告,最受欢迎的编程语言是?
  7. redis-配置说明-重要的几个配置
  8. 计蒜客蓝桥杯模拟赛5 引爆炸弹【并查集】
  9. 教育部:“改薄”工程实施中预防拖欠农民工工资
  10. cisco2950 查看端口流量
  11. FZU 2020 组合
  12. paip.asp 项目流程及管理工具总结
  13. 当前系统license已过期什么意思_Windows10为什么老是显示系统许可证已过期
  14. jQuery快速掌握(看这一篇就够了)
  15. C# word 操作进阶-05-复制表格[转载]
  16. 无线路由的四种加密方式
  17. 3Com公司不打算与华为共享敏感技术
  18. 计算机辅助英语教学 教材,英语教学课中计算机辅助
  19. 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)
  20. 鸟哥推荐php书籍,好书推荐(PHP方向)

热门文章

  1. 英文文本分词之工具NLTK
  2. bcedit双系统更改启动项名称_Win7下双系统修改BCD启动项名称
  3. 第1篇:Python 环境搭建
  4. 【产业互联网周报】互联网集体进入调整期:张勇兼任阿里云总裁,卢伟冰晋升小米集团总裁,小鹏组织架构调整;...
  5. vim setting
  6. 反恐精英代码_游戏《反恐精英:全球攻势》《军团要塞2》源代码遭泄露
  7. 2021年JAVA面试~光头佳的论述
  8. 【C++复习总结回顾】—— 【一】基础知识+字符串/string类
  9. 闲来无事,做个了批量看图的页面
  10. 解决时间差太大导致Windows无法同步时间