c++编程语言有3中不同类项的变量:全局变量、局部变量和动态分配变量。变量的值存储在计算机的内存中,但是变量存储的方式取决于变量的类项。3种类型的变量分别对应存储器中3个特定的区域:

  • 全局变量存放在存储器中的固定位置。
  • 局部变量存放在运行时栈上。
  • 动态分配变量存放在堆上。

全局变量的声明在所有函数的外面,在程序的执行过程中位置保持不变。局部变量在函数中声明,函数被调用时它们出现,函数结束时他们消失。动态分配变量随着new运算符的执行出现,随着delete运算符的执行消失。

栈是一个值的容器,通过压入(push)操作存入值,通过弹出(pop)操作取出值。存入和取出值的原则都是后进先出(弹出最后一个压入的值),所以有时候栈被称为LIFO表,Last In ,First Out

每条执行的c++语句是一个函数的一部分。c++函数有一个返回类型、一个名字和一个参数表。程序包括一个名为main的特殊函数。通过执行main函数中的语句来执行程序。main函数中的语句有可能掉用另一个函数。当执行一个函数时,按照如下顺序对运行时栈的空间进行分配:(在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。)

  • 压入返回值的存储空间。
  • 压入参数。
  • 压入返回地址。
  • 压入局部变量的存储空间。(函数静态变量是在静态存储区的,不入栈)

当函数结束时,按照相反的顺序释放运行时栈的存储空间

  • 释放局部变量。
  • 弹出返回地址,根据返回地址确定要执行的下一条语句。
  • 释放参数。
  • 弹出返回值,按照调用语句指定方式进行使用。

不管一个函数是main函数,还是在另一个函数中被一条语句调用的函数,都会执行这些步骤。

转载请注明出处:http://www.cnblogs.com/goudanli/p/7700536.html

计算机系统核心概念及软硬件实现

最新文章

  1. LIstView 滚动 异步 加载更多 mono for android ScrollStateChanged ScrollState.Idle; Fling;TouchScroll
  2. pip高级使用技巧以及搭建自己的pypi服务器
  3. WPF 得到子指定元素方法和得到指定子元素集合方法MvvM得到焦点
  4. C# 常用对象的的修饰符
  5. Appium服务器端从启动到case完成的活动分析
  6. ASP.NET 开发者 开始学习ASP.NET Core 2吧
  7. 将项目(代码)从GitHub上克隆(下载)到本地仓库
  8. 激活效能,CODING 敏捷研发模块上线
  9. IBM服务器安装Ubuntu Linux server 64以及网络配置
  10. TCP/IP学习
  11. Java面试3
  12. BI项目记(二):给我接套数据
  13. python-对象方法、静态方法、类方法
  14. no matching function for call to ‘std::basic_string<char>::assign(std::string&, int)
  15. uva10167
  16. JS 获取时间
  17. 【java排序】 归并排序算法、堆排序算法
  18. dev gridview指定单元格cell获取坐标
  19. Linux VFS的主要的数据结构
  20. Python字典 (dict)

热门文章

  1. spring data mongodb 操作
  2. php代码优化 -- array_walk 和 foreach, for 的效率的比较
  3. js发送windows提示信息
  4. Python Twisted网络编程框架与异步编程入门教程
  5. dubbo学习 一 dubbo概述
  6. Hibernate4.3.5入门HelloWorld
  7. MongoDB在Java下的增删查改
  8. Objective-C 的 self 和 super 详解 (用简单程序说明问题)
  9. Leetcode:Task Scheduler分析和实现
  10. 刷题向》图论》BZOJ1001 平面图最大流、平面图最小割、单源最短路(easy+)