内存管理
- 引入:内存是分区管理的,分为代码区、静态区、堆区、栈区。
- 代码区:存放可执行代码,包括函数、常量字符串、
- 静态区:存放全局变量和静态变量,在程序编译时已经分配好,且在运行期间一直存在
- 栈区:存放函数形参、局部变量、任务切换时的上下文内容 (一般为高地址向低地址存放)
- 堆区:存放运行时动态分配的内存段,容量远大于栈,低地址向高地址分配。由于每次分配的大小不固定,所以堆内存往往不连续,易造成内存碎片。 - 内存分配常见错误及对策
- 内存分配失败,却使用了它——在使用内存之前检查指针是否为NULL或着使用断言
- 内存分配成功,但没初始化或者误以为内存的默认初值全为0,导致引用初值错误(数组或堆区常见)——必须进行初始化!
- 内存分配成功且初始化,但是越界——注意边界判断
- 忘记释放内存,造成内存泄漏——内存资源不断被占用且不被释放,动态分配内存时malloc与free一定要配对
- 释放掉的内存,仍继续访问——return不能继续返回栈空间、free释放后指针置NULL
程序开发流程
-
程序开发:指设计、编制、调试程序的方法和过程
-
可行性分析:指通过技术和市场调查等活动,从技术、经济、应用以及法律等方面分析应解决的问题是否有可行的解,从而确定该软件系统是否值得开发。
-
问题的提出
-
可行性研究:经济、技术、社会、法律、操作
-
可行性研究报告
-
-
需求分析:通过分析、整理和提炼所收集的用户需求,建立完整的需求分析模型,编写软件需求规格说明书
- 任务:通过详细调查现实世界要处理的对象,充分里哦阿姐系统工作概况,明确用户的各种需求然后在此基础上确定新系统的功能。
- 方法:
- 功能分解法:功能 + 子功能 + 功能接口
- 结构化分析:数据流 + 数据处理 + 数据存储 + 端点 + 处理说明 + 数据字典
-
系统设计:根据需求的规格说明,确定软件的体系结构,并为每一个系统模块设计算法、数据结构、接口。
- 总体设计:概要的回答系统应如何实现,建立初步模型
- 系统架构设计:根据系统的需求框架,确定系统的基本结构,形成系统架构,以获得有关系统创建的总体方案
- 软件结构设计:设计组成系统的各个子系统,划分各个子系统的功能模块,形成具有预定功能的模块组成结构,确定模块间的调用关系。
- 详细设计:完成总体设计的所有设计细节
- 数据结构设计
- 算法设计
- 界面设计
- 代码设计
- 输入输出格式设计
- 总体设计:概要的回答系统应如何实现,建立初步模型
-
代码实现:依照开发规范,将软件设计转换成计算机可以接受的程序
- 软件编码:设计风格、代码效率、容错机制
- 单元测试:模块接口、错误处理、边界条件
-
集成测试:将多个单元组合成模块,多个模块又聚合成分系统或系统
- 任务:测试软件单元的组合是否能正常工作,以及与其他组的模块能否集成起来工作。最后测试构成系统的所有模块组成能否正常工作。
- 方法:自底向上测试、自顶向下测试
-
系统验收:项目收尾,通过验收后,才能进入后续的系统总结、系统维护、系统评价等
- 内容:系统软件产品、文档、已经完成的交付成果
-
示例:简易图书管理系统