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

2.1 变量

层级名称
7应用层(App)
6高级语言层(HOL)
5汇编层(Asmb)
4操作系统层(OS)
3指令集架构层(ISA)
2微代码层(Mc)
1逻辑门层(LG)

典型计算机系统的层次结构

HOL6 层的语句必须先被翻译到ISA3 层,然后计算机才能直接执行。有些编译器是从第 6 层翻译到第 5 层,然后再要求从第 5 层翻译到第 3 层。

2.1.3 C 的内存模型

C 编程语言有 3 种不同类型的变量:全局变量、局部变量和动态分配变量。分别对应存储器中 3 个特定的区域:

  • 全局变量存放在内存中的固定位置
  • 局部变量和参数存放在运行时栈上
  • 动态分配变量存放在堆上

2.3 函数

当一个函数被调用时,运行时栈上分配了 4 项:

  • 返回值
  • 参数
  • 返回地址
  • 局部变量

当执行一个函数时,按照如下顺序堆运行时栈的空间进行分配:

  • 压入返回值的存储空间
  • 压入实参
  • 压入返回地址
  • 压入局部变量的存储空间

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

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

2.4 递归

函数的递归定义是指函数使用其自身来定义自己。

递归函数是调用它自己的函数。

在递归调用时,如果运行时栈上有两个变量 n,任何对局部变量或形参的引用指的都是顶部栈帧中那个。

2.4.2 递归的思考方式

为了理解 C 怎样实现递归,需要了解微观的角度。在学习 Asmb5 (汇编语言层)怎样递归时,必须了解运行时栈的细节。如果只是想写递归函数,应该宏观而不是微观地思考。为此,你必须忘掉运行时栈,宏观地思考如何写递归函数。

递归函数使用了分而治之的策略思想,在每一次调用时,都将问题的规模进一步减小,直到达到计算边界时为止。有时,也称作减治法。

在写递归函数时,需要注意以下几点:

  • 明确递归函数的返回值 —— 含义
  • 明确参数
  • 注意边界条件(以免死循环)

2.4.8 递归的成本

在执行递归函数时,运行时栈需要大量的存储空间,同时也要花费时间分配和释放栈帧。递归解决方案在空间和时间上都相对于非递归(如递推,迭代)是昂贵的。

2.5.5 动态内存分配

在 C 语言中,值存储在主存储器的三个不同区域:

  • 全局变量存储在内存的固定区域
  • 局部变量和参数存储在运行时栈
  • 动态分配的变量和参数存储在堆中

Java 的内存模型

利用了分层的思想,将内存划分成 6 个区域,如下:

1. PC(程序计数器)

2. VM Stack(虚拟机栈)

3. native method(原生方法)

4. method area(方法区)、

5. constant pool(常量池)

6. heap(堆)

1 – 3 是线程独享的, 4 – 6 是线程共享

本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,说不定哪天故事又继续更新了呢。
本文地址:https://qoogle.top/chapter-two-of-computer-system-core-concepts-and-software-and-hardware-implementation/
最后修改日期:2020年4月24日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。