17Enjoy8

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2011年5月29日

摘要: 在多进程、多线程并发的环境里,从概念上看,有多个进程或者多个线程在同时执行,具体到单个CPU级别,实际上任何时刻只能有一个进程或者线程处于执行状态;因此OS需要决定哪个进程执行,哪些进程等待,也就是进程的调度。一、调度的目标1、首先要区分程序使用CPU的三种模式:IO密集型、计算密集型和平衡型。对于IO密集型程序来说,响应时间非常重要;对于CPU密集型来说,CPU的周转时间就比较重要;对于平衡型程序来说,响应和周转之间的平衡是最重要的。2、CPU的调度就是要达到极小化平均响应时间、极大化系统吞吐率、保持系统各个功能部件均处于繁忙状态和提供某种公平的机制。3、对于实时系统来说,调度的目标就是要达 阅读全文
posted @ 2011-05-29 14:30 17Look8 阅读(415) 评论(0) 推荐(0) 编辑

摘要: UML(unitfied modeling language)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明,可视化和编制文档的一种标准语言。UML展现了一系列最佳工程实践,这些实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次上已经被验证有效。UML分为静态和动态2类。静态:描述对象之间可能存在的关系的种类,以及作为结果的对象网络的可能具有拓扑结构。动态:描述可以在对象之间传递的信息,以及该信息对接收消息的对象的影响。UML最适于数据建模,业务建模,对象建模,组件建模。最常用的UML图包括:用例图、类图、序列图、状态图、活动图、组件图和部署图。U 阅读全文
posted @ 2011-05-29 14:13 17Look8 阅读(378) 评论(0) 推荐(0) 编辑

2011年5月27日

摘要: 基类的实现1、新建基类窗口,资源为IDD_BASE,CBase.Cpp和CBase.h。2、修改基类构造函数,增加一个默认参数ID。CBase(UINT ID = NULL,CWnd *pParent = NULL);CBase::CBase(UINT ID /*= NULL*/),CWnd *pParent /*= NULL*/) :CDialog(ID,pParent ){}3、注释头文件中的IDD_BASE一行。//enum{IDD = IDD_BASE};4、实现基类样式,如背景等。继承类的实现1、新建继承类,资源IDD_DERIVED,CDerived.cpp和CDerived.h。 阅读全文
posted @ 2011-05-27 13:04 17Look8 阅读(343) 评论(0) 推荐(1) 编辑

2011年5月26日

摘要: 1、从静态存储区域分配 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。2、在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。3、从堆上分配 亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意大小的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多,经常一不留神就发生内存泄露了。 阅读全文
posted @ 2011-05-26 23:52 17Look8 阅读(353) 评论(0) 推荐(1) 编辑

摘要: 1、const定义常量,修饰函数参数和函数返回值。被const修饰后受到强制保护,防止意外地被修改。2、const常量有数据类型,而宏常量没有数据类型。3、编译器可以对const常量进行类型安全检查。而对宏常量只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。View Code 1 #define DOUBLE(x) x+x 2 int value = 5*DOUBLE(5);//value = ?3 4 /*正确的写法*/5 #define DOUBLE(x) ((x)+(x)) 阅读全文
posted @ 2011-05-26 23:47 17Look8 阅读(656) 评论(0) 推荐(1) 编辑

摘要: 1、new/delete 是C++运算符,而malloc/free是C++/C语言的标准库函数。2、他们都是在堆上进行内存的动态分配与释放的,用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造(constructor)函数。delete 会调用对象的析构(destructor)函数,而free 不会调用对象的destructor,只释放内存。3、delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。4、用new分配的内存用delete删除,用new[]分配的内存用delete[]删除。可以简单的说delete删除一个指针,而de 阅读全文
posted @ 2011-05-26 23:05 17Look8 阅读(423) 评论(0) 推荐(0) 编辑

摘要: 1、结构和联合都是有多个不同数据类型的成员组成,但是在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。2、对联合的不同成员赋值,将会对其他成员重写,而结构不存在。View Code 1 union{ 2 int i; 3 struct 4 { 5 char first; 6 char second; 7 }half; 8 }number; 9 number.i=0x4241; /*联合成员赋值*/ 10 printf("%c%cn", number.half.first, mumber.half. 阅读全文
posted @ 2011-05-26 22:42 17Look8 阅读(529) 评论(0) 推荐(0) 编辑

摘要: 1、引用是变量的别名,对引用的操作与对变量直接操作的效果一样。2、申明引用时,必须初始化,一旦申明后,就不能再作为其他变量的引用了。3、引用不是变量,也不是一种新的数据类型,只是变量的别名。4、引用不占内存空间。5、不能对数组申明引用。6、传递引用给函数与传递指针的效果一样,被调函数的形参就成为原来主调函数的实参,因此对形参的操作就是对其实参的操作。7、引用作为形参,在内存中不产生实参的副本,因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。8、如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型 阅读全文
posted @ 2011-05-26 22:37 17Look8 阅读(211) 评论(0) 推荐(1) 编辑