Sep
22

拒绝使用编译器提供的copy函数


由于在声明类的时候,即使你没有自己写,copy函数和拷贝操作符(=)也会被编译器自动生成。但是有些时候有些类表示的是独一无二的对象,那么拷贝有什么用呢?或者说你希望设计一个类,这个类只能被直接实例,而不能通过拷贝而获得对象。那么如何阻止编译器给类加上拷贝和拷贝操作符呢?

Class Uncopyable

{

Protected:

Uncopyable(){}

~Uncopyable(){}

Private:

Uncopyable(const Uncopyable&);

Uncopyable& operator=(const Uncopyable&);

};

Class yourclass: private Uncopyable

{

……………………...

}

Sep
07

Windows内存机制

内存是计算机里面一个非常重要的部分,RAM的大小对于一个机器来说就像血管对于人类的作用。光有一个强健的CPU(心脏),而没有畅通的内存(血管)一样会出现各种问题。

从我认识内存这个东西的作用开始,都停留在非常肤浅的层次,比如说内存越大速度越快等等。直到了解它叫RAM,知道了它属于随机存储器断电就会丢数据。最近在看c++的效率的书,发现了这个,了解一些windows的内存机制,特此笔记

 

1、win32虚拟内存管理器为每一个win32进程提供进程私有的且基于页的4GB(32位)大小的线性虚拟地址空间(其实就是一个地址)

其中”进程私有”指的是每个进程只能访问属于自己的地址空间,而无法访问其他进程的地址空间;”基于页”指的是虚拟地址空间被划分为多个成为页的单元,每一个页的大小由底层的处理器决定,页是数据流的最小单位;”4GB”意味着进程中的地址的取值范围可以从0×00000000到0xFFFFFFFF,低区2GB给进程使用,其他的给系统使用。

2、访问不在内存中的东西(主要指代码或者数据)会出现”缺页”错误,不过一般写程序不用考虑这个错误,因为系统会自动处理这个错误(比如说从硬盘IO加载要访问的代码和数据)

3、分配内存时有两个步骤”预留”和”提交”。而地址空间有三种状态”free”"reserved”"committed”:第一个表示地址没有被使用,第二个表示空间已经被预留,但是没有分配物理内存,不能访问;第三个表示从调页文件中开辟磁盘空间,直到有访问才会开辟物理内存。

4、win32中通过一个两层表结构实现地址的映射:第一层”页目录”(PDE)有4KB大小,第二层”页表”(PTE),页表中每一项都指向物理内存中的一个页帧。

4GB的地址空间,每一个虚拟地址都是一个32位的整数,在使用时前10位左移两位用于定位PDE中的项,中间10位左移两位在PDE定位页表中定位某一项,最后12位直接定位物理页面中的特定字节位置。

5、win32系统为每个进程定义一个最大和一个最小的工作空间,超过这个空间,系统会自动利用算法将一些内存页置换到虚拟内存里

 

如何提高程序在内存上的效率呢?简单说就是写紧凑的代码,紧凑的数据!按我自己的理解,紧凑的代码有利于同一内存页里面有尽可能多的代码,而紧凑的数据也是这个道理。

(未完待续= =||貌似没人看)

Sep
02

软件工程学习笔记(1)

一、软件特点

1、软件是无形的

2、软件的副本大批量生产轻而易举

3、软件是劳动密集型的

4、没有经过充分训练的软件开发人员开发出难以理解的程序

5、很容易修改,但是很难正确的修改

6、随着反复修改,他的设计会退化

/**

其中第二、四、六给我的最明显的感觉,特别是第六条,以前修改程序总是越改越乱!!!

所以以后在修改之前都要记得备份一份,不然一旦进行了错误的修改,还有可以undo的机会。

*/

二、软件分类

1、定制软件custom software 为特定的用户所使用的,通常只有少部分人使用

2、通用软件 generic software    可以完成大多数人的工作

3、嵌入式软件 embedded software 运行在特定的设备上

或者

1、实时软件 real-time 对环境的请求应立即做出应答

2、数据处理软件 data-processing


        软件工程是在成本、时间及其他约束下,通过对大型、高质量的软件系统化地开发和演化从而解决客户问题的过程


三、软件质量

1、可用性 useability

2、效率 efficiency

3、可靠性 reliability

4、可维护性 maintainability

5、可重用性 reusability

四、软件工程的项目

1、进化型项目 修改一个现有的系统 可以提神纠错性、增强性、重建性

2、零起点项目

3、在框架或者已经有架构的基础上构造项目

五、常见活动

1、需求与规格说明(领域分析、定义问题、需求收集、需求分析、需求规格说明)

2、设计

确定硬件与软件分别实现的功能(系统工程)

决定如何将系统划分为子系统(架构)

确定构造每个子系统的详细内容

确定系统与用户交互方式(GUI)

3、建模 包括用例模型、结构化模型、动态和行为模型(表示构件的交互等)

4、程序设计

Sep
01

UML建模软件前期、用例图相关笔记

1、应当尽力开发一个域模型。它应该能支持早期各个独立模型重所表达的所有需求,最初这个域模型只是一个框架,而不是特别详细的模型,细节部分应留到开发部分。

也就是说在初始建模的时候不用太详细,只需要框架!!!

2、使用类图和交互图的来描述构建之间的通信、使用包图来描述构建的高层结构、使用配置图来描述系统功能的分配。

3、基线体系结构:

a、用例图:用于描述系统的需求;

b、域模型:作为获取应用领域中的管件类的起点

c、技术平台

4、程序重组

a、不要在增加功能的时候进行重组,可以交替进行

b、每完成一次重组或新功能的增加,都应该进行全面的回归测试

5、无论做什么、怎么做。 了解的是需求!!

a、用例描述用户提出的一些可见的需求

b、用例可大可小

c、用例对应一个具体的用户目标

最好集中注意力在目标上,然后在开发用例以满足目标。

不要在一开始捕捉所有的细节

一系列用例的集合组成整个系统的需求

6、用例图描述了系统为”谁”提供了哪些”功能”或”服务”

7、其中执行者不一定是人,也可以是外界系统

8、用例扩展的基本方法

a、首先要获得简单的,常规的用例

    b、对用例中的每一步问”这里可能出现什么错误?”以及”怎样解决这些错误”

    c、将所有变动的部分划分出来,作为给定用例的扩展

9、当描述一段行为的变化时采用扩展,当在两个或者更多的用例中出现时为避免重复应使用包含

10、获取用例执行者:

a、谁使用系统的主要功能

    b、谁需要系统支持阿门的日常工作

    c、谁管理、维护系统使其正常工作

    d、系统所要控制的硬件

    e、系统需要与那些系统交互

    f、对系统产生兴趣的是哪些人哪些事物

11、获取用例

a、执行者要求系统提供哪些功能

b、执行者需要读、产生、删除、修改哪些系统中的信息

c、必须提醒执行者系统中的事件有哪些

d、执行者必须提醒系统中有哪些事件,怎么处理

*e、系统需要何种输入输出?输入哪来?输出哪去?

*f、当前运行系统的主要问题是什么?

Pages: 1 2 3 4 Next

旧文章 «