程序性能指运行一个程序所需要的时间和空间的多少。
可通过性能分析和性能测量来确定一个程序的性能。

空间复杂度

指程序的运行需要内存的大小。

程序需要的空间:

  1. 指令空间:编译之后的程序指令需要的储存空间。
  2. 数据空间:所有常量和变量值需要的存储空间。——常量、变量;动态数组和动态类实例等动态对象需要的空间。
  3. 环境栈空间:保存暂停的函数和方法在恢复运行时需要的信息。(比如说指令地址)

指令空间数量取决于:把程序转换成机器代码的编译器。编译时的编译器选项。目标计算机。
采用相同的编译器,得到的程序代码可能也有不同(编译器有一些优化选项)
程序还需要一些额外空间,因为一些临时变量所占用的空间。
编译器的覆盖选项,空间只分配给当前正在执行的程序模块。调用新模块要从磁盘中读取,新模块的代码会覆盖原本的程序模块,、程序需要的空间就是最大模块需要的空间。
目标计算机的配置也会影响编译后的代码大小,是否安装浮点处理硬件。


数据空间:

  1. 数据类型占据的空间
  2. 结构变量的空间是每个结构成员所需的空间大小之和
  3. 数组:数组的大小*一个数组元素的空间大小

环境栈空间:每当一个函数被调用时、下面的数据都会被保存在环境栈中。
返回地址
正在调用的函数的所有局部变量的值及形参的值(对于递归函数而言)
不同编译器,有差别。


递归函数需要的栈空间为递归栈空间,大小依赖于局部变量和形参需要的空间,递归的最大深度和编译器。
程序需要的空间分为两部分——固定部分和可变部分。

时间复杂度

时间复杂度也受(影响空间复杂度的因素)的影响。
程序所需要的时间=编译时间+运行时间。
一个编译过的程序可以运行若干次而不需要重新编译。
估算运行时间tp(实例特征)

  • 操作计数
  • 最好、最坏、平均操作计数

步数
一步是一个计算单位
image.png
image.png