c++内存模型------计算机系统核心概念及软硬件实现
发布日期:2022-04-04 06:36:19 浏览次数:2 分类:博客文章

本文共 892 字,大约阅读时间需要 2 分钟。

  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

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

 

转载地址:https://www.cnblogs.com/l2017/p/7700536.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:复制构造函数被调用的三种情况------新标准c++程序设计
下一篇:封闭类------新标准c++程序设计

发表评论

最新留言

关注你微信了!
[***.249.68.18]2022年05月26日 18时30分28秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

将汇编语言转化c语言,如何把汇编语言转换成C语言 2019-06-17 01:25:45
c语言 realpath函数,getenv_s - [ C语言中文开发手册 ] - 在线原生手册 - php中文网 2019-06-17 01:25:44
c 语言获取网页源码,c++实现发送http请求通过get方式获取网页源代码 2019-06-17 01:25:44
c语言综合应用题哪几步,计算机二级C上机考试综合应用题 2019-06-17 01:25:44
c语言投票程序设计,C语言课程设计-投票程序设计.doc 2019-06-17 01:25:43
中国海洋大学c语言上机作业,2014级中国海洋大学C语言上机题库及答案.docx 2019-06-17 01:25:43
debian linux 7 安装,Debian 7安装设置教程 2019-06-17 01:25:42
linux鼠标手势,Linux 系统中全能的鼠标手势——Easystroke.docx 2019-06-17 01:25:42
linux亮度调节指令,Linux Mint 亮度调节——xrandr命令学习 2019-06-17 01:25:41
linux猜拳游戏代码,在Linux下通过gtk做一个简单的小游戏(猜拳) 2019-06-17 01:25:40
linux变量默认值,使用bash中的单个命令为shell变量分配默认值 2019-06-17 01:25:40
linux统计数据为未知的行数,Linux统计行数命令wc(转) 2019-06-17 01:25:39
linux系统中启动火狐浏览器提示选择配置文件,为 Firefox Beta 设置专用配置文件... 2019-06-17 01:25:39
linux网络接入控制,PacketFence v7.0发布,网络接入控制 2019-06-17 01:25:38
linux 网络负载,一台Linux服务器可以负载多少个连接? 2019-06-17 01:25:38
linux6右键终端单词,shell脚本--for循环打印下面这句话中字母数不大于6的单词 2019-06-17 01:25:37
linux扩容脚本,读书笔记--101个shell脚本 之#9 2019-06-17 01:25:37
linux 统计多少列命令,Linux shell命令统计某列去重后的值 2019-06-17 01:25:36
oracle拓展磁盘空间,OracleVM扩容磁盘空间-Oracle 2019-06-17 01:25:35
oracle远程监听配置文件,CentOS6.5 Oracle 远程监听配置 2019-06-17 01:25:35