开源代码分析


华东师范大学软件学院

2008年暑期

注:本页所有课件材料已经打包上传,请点此链接下载

时间 星期一~星期五,上午9:00~11:00
地点 数学馆东109
教师 罗迒哉
邮件 hzluo (at) sei (dot) ecnu.edu.cn
电话 62235089
办公室 数学馆东110
答疑(Office Hour) 星期一16:00-18:00

课件

阅读材料 相关链接
  • 课程介绍

Intro.ppt

  • C/C++介绍

01.ppt

02.ppt

03.ppt

04.ppt

  • 作业情况反馈

homework.ppt

homework2.ppt

 

BCB使用

指针的使用1

指针的使用2

内存实验

继承实验

资源管理实验

cache原理简介

汇编语言学习资料

 

计算机科学引论:主页

lyx: http://www.lyx.org  

海量计算研究所学生培训项目

类反词典


课程作业参考答案(仅供参考)

冒泡排序 链表 文件读写 资源管理
bubbleTest.zip

这里使用了一个删节的动态数组的模板。

这里使用了一个完整功能的动态数组的模板。

完整版的双向链表模块:listFull.zip。(没有测试代码)

fileIO.zip

这里使用了一个完整功能的动态数组的模板和文本文件IO的类。

动态数组的模板在前面所有的作业中都有使用,请参考其中的用法。文本文件IO的类已经在文件读写的作业中使用过了,请参考其中的用法。另,上面阅读材料中给出的资源管理实验也可参考。

原始文件IO的类请参考rawIO.zip。由于接口非常简单,而且和前面两个类非常相似,这里没有给出测试程序。有兴趣的同学可以自己编写测试程序。

课程项目参考答案(仅核心类和函数)

这里给出比特输入输出的类和3个不同的测试时间间隔的类,供参考。没有测试代码,有兴趣的同学可自己写一下测试代码。点击这里下载


学期后课程项目安排

1、项目申请书:8月11日通过电子邮件提交。提交后如选题非常不合适,可能会反馈意见要求修改。

2、8月17日集合(暂定),反馈申请书信息。具体时间将会提前1周通过电子邮件通知。请注意查收电子邮件。

3、10月7日前后第一次进度报告。

4、11月10日前后第二次进度报告。

5、12月1日前后交项目总结。

6、12月15日前后讲评项目。


供参考的课程项目

1.VisualTeXsty

编写一个生成Tex格式文件的工具,能够方便地操作,并基本实现所见即所得。要求可同时生成给LaTeX系统使用的.sty/.cls和给LyX使用的.layout。本项目要求较高的C/C++技巧,并有一定的排版方面的基础。

2.C--

编写一个小巧的C/C++库,目标是让常见程序的编写、调试变得方便,并可编译、连接成非常小的程序,节约运行资源。该库一方面是对现有C/C++库的简化,把不常用的功能去除以减小连接后程序的体积,另一方面增加一些常用的类、模板,提供方便地管理各种资源的目的,让日常的程序编写工作变得方便、高效。该项目需要重新编写程序启动代码、大部分核心C/C++库函数,所以需要较高的汇编和C/C++技巧,以及编译、操作系统等方面的知识。如果这方面知识有所欠缺,可考虑选择下面的一些子项目,或者自己提出合适的子项目。

2.1 FastString

使用MMX、SSE-SSE4指令实现字符串函数,比较其实现在不同CPU上的性能以及与C实现的性能差异,从而实现一个快速字符串处理库。该项目是C--的一个子项目。

2.2 LibRawIO

用原始操作系统调用实现两个文件接口类,其中一个是无缓冲的,另一个是有缓冲的。这两个类用于替换C中有关文件IO的函数,无缓冲的替换open、creat、read、write、close等,有缓冲的替换fopen、f...等。在Windows平台,原始操作系统调用以ntdll接口实现。该项目是C--的一个子项目。

2.3 xprintf/xscanf

实现一系列函数,最终实现...printf和...scanf等函数。该项目是C--的一个子项目。

2.4 AlignedMM

实现内存管理功能,与传统C库函数内存管理相区别的是可以实现指定对齐要求的内存分配。由于矢量指令的普及,内存对齐对程序速度的影响已经到了非常高的程度,指出对齐的内存管理是非常有意义的。该项目是C--的一个子项目。

3. BinEdit

编写一个全新概念的二进制文件编辑器。目前的二进制文件编辑器一般都是指十六进制编辑器。然而,用户总是希望能够根据文件的格式来进行编辑,而不是简单的二进制串。所以,可以支持按格式进行二进制文件编辑,并支持大量的不同二进制格式的工具是很有用处的。

4. InlineReLyx

给LyX增加“reLyx on the fly”功能,即在粘贴LaTeX代码的时候实时转换成LyX的内存格式。例如,JabRef可以把选中的参考文献条目转换成\cite{...}的格式放到到剪贴板,如果在LyX中粘贴可以获得一个参考文件引用控件,则可极大方便使用。

5. DiagramDrawer

Word画框图的功能是比较实用的。虽然有很多软件实现了类似功能,但易用性却差了很多。本项目实现一个使用非常方便的画框图软件。不强调功能特别强大,而是专门强调易用性,要求对平常的系统功能表示、简单流程图等应用中达到甚至超过Word框图的能力。参考:LaTeXDraw。

6. DataDraw更新项目

DataDraw对实现和管理复杂数据结构是很有好处的,但它有一些小的问题需要改进和完善。本项目改进和完善DataDraw,实现一个稳定、好用的版本。

 


成绩评定比例:

学期中:作业20%,课堂报告10%,开源项目调查报告20%

学期后参加开源项目:程序25%,报告25%