zoukankan      html  css  js  c++  java
  • c++内存模型------计算机系统核心概念及软硬件实现

      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

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

  • 相关阅读:
    Swift3 重写一个带占位符的textView
    Swift3 使用系统UIAlertView方法做吐司效果
    Swift3 页面顶部实现拉伸效果代码
    Swift3 倒计时按钮扩展
    iOS 获取当前对象所在的VC
    SpringBoot在IDEA下使用JPA
    hibernate 异常a different object with the same identifier value was already associated with the session
    SpringCloud IDEA 教学 番外篇 后台运行Eureka服务注册中心
    SpringCloud IDEA 教学 (五) 断路器控制台(HystrixDashboard)
    SpringCloud IDEA 教学 (四) 断路器(Hystrix)
  • 原文地址:https://www.cnblogs.com/l2017/p/7700536.html
Copyright © 2011-2022 走看看