第一章 编程基础
1.1 存储类别
- auto
- 用法:
auto int number
- 特点:这种类型的变量会在函数被调用时自动创建,函数退出后自动销毁。
- 用法:
- extern
- 用法:
extern int number
- 特点:
- 用extern声明变量时,系统并不会为其分配内存空间。
- 将变量申明为extern时,编译器会搜寻其是否被定义或初始化,如果没有则显示错误消息。
- 用法:
- register
- 用法:
register int count
- 特点:
- 用register修饰的变量存放在寄存器中
- 用于被频繁快速访问的变量,可以提高变量的读写速度
- 不要将全局变量声明为register,有可能使得变量在整个运行期间始终占据着寄存器
- 用法:
- static
- 用法:可用于修饰变量,也可以修饰函数
- 修饰变量
- 内部静态变量:声明在函数中的静态变量,作用域在函数内,仅在编译时初始化一次,例如可以用于统计函数被调用的次数。
- 外部静态变量:定义在函数外边,与一般全局变量不同的是外部静态变量只在该文件中的函数可以访问,其他文件中则无法访问。
- 修饰函数
- 用于控制函数的作用域。用static修饰的函数仅可被该文件内的函数访问,其他文件中的函数则无法访问。
1.2 存储空间类型
1.2.1 静态段
静态存储空间可以分为两部分:
-
代码段(Code Segment):用于存放程序代码,该部分的内容一般为只读且受到保护的。
-
数据段(Data segment):用于保存全局数据,该部分的内容一般为可编辑的。保存如下三种类型的数据:
- 全局变量
- 数值与字符串等常量
- 静态变量
1.2.2 栈段
栈段一般保存程序运行状态和活动记录的数据,包括以下信息:
- 局部变量
- 形参
- 临时变量
- 返回地址
- 与程序运行有关的其他附加信息
1.2.3 堆段
我们在程序中动态分配的空间就在堆上。
- 堆内存的分配方式:
- malloc/free
- new/delete
- 内存碎片
碎片(fragment):内存中出现的容量比较小且无法为任何进程所使用的空间,称为内存碎片。
内存碎片分为两类:
内部堆碎片:分配出来的内存比所需的内存空间大,没有完全利用而多出来的部分
外部堆碎片:内存小块无法被任何一个进程所能利用,这种内存小块为外部碎片。
- 堆分配算法
系统使用链表维护堆中的每一块空闲内存。
堆分配有两种分配方式:
- 最先适配法(first fit):选出收个能够满足请求的内存块。
- 最佳适配法(best fit):选出符合请求的容量最小的内存块,以达到最小浪费的目的。
1.3 编程方式
- 无结构编程
- 过程式编程
- 模块式编程
- 面向对象编程(OOP)
-
重点在于:对象(object)和数据(data),而非函数与逻辑。
-
OOP背后的逻辑思想:将程序视为一系列能够彼此交流的对象,而不是将其视为一系列的函数或者是指令。
- 面向对象的观点来看:每个对象都可以接收消息,处理数据、并给其他对象发送消息。他们是独立的行动者,各自扮演着某种角色。
- OOP的三要素:封装、继承、多态
-
1.4 面向对象编程的基本概念
OOP的8个基本概念:
- 类与对象(class and object)
- 封装(encapsulation)
- 抽象(abstraction)
- 数据隐藏(data hiding)
- 多态(polymorphism)
- 继承(inheritance)
- 动态绑定(dynamic binding)
- 消息传递(message passing)