自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

孜孜不倦

  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 QT下使用boost::threadpool编译问题

threadpool不属于BOOST,以下是安装链接http://www.cnblogs.com/kingcat/archive/2012/05/07/2487192.html作者使用的是BOOST1.58.0版本由于安装BOOST库的缘故导致系统下的动态库如以下形式:libboost_thread.so.1.58.0有一个1.58.0的后缀,虽然boost库可以正常调

2016-10-22 14:30:14 599

原创 QT链接muduo库

muduo编译安装链接http://blog.csdn.net/liuweihui521/article/details/52556375使用muduo库中自带的例子DiscardServer,路径examples/simple/DiscardServer;代码直接拷贝即可。在PRO文件中添加以下数据:LIBS += /usr/lib/muduo/libmudu

2016-10-20 19:36:07 1020

原创 地下通道之MVC模式

地下通道如下图:        A路(B路,C路)只知地下通道,不知B路,C路(A路,C路;A路,B路)。通过地下通道做中转,A路到B路,C路。MVC模式如下图:         MVC模式,只让视图知道控制器,只让模式知道控制器,达到可维护强,可扩展强。

2012-05-27 09:46:53 830

原创 Reassociation Transformation

void combine7(vec_ptr v, data_t* dest){    long int i;    long int length = vec_length(v);    long int limit = length - 1;    data_t* data = get_vec_start(v);    data_t acc = IDENT;

2012-03-09 22:33:42 716

原创 Enhancing Parallelism

void combine6(vec_ptr v, data_t* dest){    long int i;    long int length = vec_length(v);    long int limit = length - 1;    data_t* data = get_vec_start(v);    data_t acc0 = IDENT;

2012-03-09 22:29:41 441

原创 Loop Unrolling

void combine5(vec_ptr v, data_t* dest)  {      long int i;      long int length = vec_length(v);      long int limit = length - 1;      data_t* data = get_vec_start(v);      data_t acc = IDENT;

2012-03-09 22:24:30 697

原创 Eliminating Unneeded Memory References

void combine4(vec_ptr v, data_t* dest)  {      long int i;      long int length = vec_length(v);      data_t* data = get_vec_start(v);      data_t acc = IDENT;        for (i = 0; i     {          acc

2012-03-08 20:24:44 446

原创 Reducing Procedure Calls

data_t* get_vec_start(vec_ptr v)  {      return v->data;  }    void combine3(vec_ptr v, data_t* dest)  {      long int i;      long int length = vec_length(v);      data_t* data = get_vec_start(v);

2012-03-08 20:14:56 507

原创 Eliminating Loop Inefficiencies

void combine2(vec_ptr v, data_t* dest)  {      long int i;      long int length = vec_lenght(v);        *dest = IDENT;      for (i = 0; i length; ++i)      {          data_t val;          get_vec_elem

2012-03-08 20:06:01 523

原创 ProgramExample

typedef int data_t;    typedef struct {      long int len;      data_t* data;  }vec_rec, *vec_ptr;    #define IDENT 0  #define OP +    //#define IDENT 1  //#define OP *    vec_ptr new_vec(long int len

2012-03-08 19:43:07 444

原创 Optimizing Program Performance

1:Eliminating Loop Inefficiencies2:Reduce Procedure Calls3:Eliminating Unneeded Memory References4:Loop Unrolling5:Multiple Accumulators6:Reassociation Transformation看了下优化程序性能,感触良多,接下来

2012-03-07 22:37:32 524

原创 读书笔记 Effective STL

STL是建立在泛化之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。

2012-03-03 18:53:22 404

原创 读书笔记 Effective C++

声明一个pure virtual函数的目的是为了让derived classes只继承函数接口。声明简朴的(非纯)impure virtual函数的目的,是让derived classes继承该函数的接口和缺省实现。声明non-virtual函数的目的是为了令derived classes继承函数的接口及一份强制性实现。由于non-virtual函数代表的意义是不变性(invarian

2012-02-23 20:36:13 343

原创 读书笔记 Effective C++

尽量以pass-by-reference-to-const替换pass-by-value。前者通常比较高效,并可避免切割问题(slicing problem)       以上规则并不适用于内置类型,以及STL的迭代器和函数对象。对它们而言,pass-by-value往往比较适当。

2012-02-22 18:55:16 375

原创 读书笔记 Effective C++

polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。       Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphically),就不该声明virtual析构函数。

2012-02-19 12:34:46 411

原创 公交车之设计,堵车看模式

武汉的公交车如下图:广州的公交车如下图:

2012-01-29 14:35:08 1402 1

原创 C语言一行一行读文件

char RevData[100]; FILE* pfile = fopen("20111216-1633-1634.TXT", "r"); CDev dev; while (!feof(pfile)) { fgets(RevData, sizeof(RevData), pfile); dev.OnReceive((const void*)RevData, sizeof(RevD

2011-12-20 10:38:20 2427

原创 心境

最近心绪纷飞,看书没有心思,没有前段时间的激情与渴望,多了一些迷茫与茫然。一部分是强迫自己看英文书籍,毕竟英语不提高,对于以后的发展总是有影响的;另一部分是最近在看算法,不像前段时间看操作系统概念,一点就透,算法需要心思去思考,更令我惰懒的是还是看的英文,进度就更缓慢;最重要的原因可能最近工作上的事需要思考的太多了,花费了太多心神,以至于晚上只想放松,或者说脑袋刚想想问题就想到工作上的难题。等最近

2011-11-30 20:50:51 744

原创 看伪码写算法 归并算法

2011-11-23 21:03:24 827

原创 看伪码写算法-插入算法

2011-11-21 20:17:31 851

原创 链接 读深入理解计算机系统

链接(linking)就是将不同部分的代码和数据收集和组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行。链接可以执行于编译时(compile time),也就是在源代码被翻译成及其代码时;也可以执行于加载时(load time),也就是在程序被加载器(loader)加载到存储器并执行时;甚至执行于运行时(run time),由应用程序来执行。链接器在软件开发中扮演着一个关

2011-11-19 17:26:14 585

原创 数组分配和访问 读深入理解计算机系统

T A[N];它在存储器中分配了L×N字节的连续区域,这里L是数据类型T的大小(单位为字节)。我们用XA来表示起始位置。其次,它引入了标识符A,A可以用来作为指向数组开头的指针。这个指针的值就是XA。可以用0~N-1之间的整数索引来访问数组元素。数组元素i的存放地址XA+L*i.指针运算如果p是一个指向类型T的数据的指针,p的值为Xp,表达式p+i的值为Xp+L*i,这里L是数

2011-11-18 10:45:09 730

原创 寄存器使用惯例 读深入理解计算机系统

程序寄存器是唯一一个被所有过程共享的资源。虽然在给定时刻只能有一个过程是活动的,我们必须保证当一个过程(调用者)调用另一个(被调用者)时,被调用者不会覆盖某个调用者稍后会使用的寄存器的值。为此,IA32采用了一组统一的寄存器使用惯例,所有的过程都必须遵守,包括程序库中的过程。根据惯例,寄存器eax,edx,ecx被划分为调用者保存(caller save)寄存器。当过程P调用Q时,Q可以覆盖这

2011-11-17 14:44:04 3483

原创 程序的机器级表示 读深入理解计算机系统

1:程序计数器(称为%eip)表示将要执行的下一条指令在存储器中的地址。2:整数寄存器文件包含8个被命名的位置,分别存储32位的值。这些寄存器可以存储地址(对应于C的指针)或整数数据。有的寄存器用来记录某些重要的程序状态,而其他的寄存器用来保存临时数据,例如过程的局部变量。3:条件码寄存器保存着最近执行的算术指令的状态信息。它们用来实现控制流中的条件变化,比如说用来实现if或while语句

2011-11-17 14:23:17 1187

原创 处理器读并解释储存在存储器中的指令 读深入理解计算机系统

hello.c源程序已经被编译系统转换成了可执行目标文件hello,并被存放在磁盘上。为了在Unix系统上运行该可执行文件,我们将它的文件名输入到称为shell的应用程序中:unix> ./hellohello,worldunix>shell是一种命令行解释器,它输出一个提示符,等待你输入一行命令,然后执行这个命令。如果该命令行的第一个单词不是一个内置的shell命令,那么shel

2011-11-13 13:00:06 866

原创 程序被其他程序翻译成不同的格式

在hello程序生命周期的一开始时是一个高级C程序,因为当处于这种形式时,它是能够被人读懂的。然而,为了在系统上运行hello.c程序,每条C语句都必须被其他程序转化为一系列的低级机器语言指令。然后这些指令按照一种称为可执行目标程序(executable object program)的格式打好包,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件(executable object

2011-11-10 20:04:58 621

原创 信息就是位+上下文 读深入理解计算机系统

我们的hello程序的生命是从一个源程序(或者说源文件)开始的,该源程序由程序员通过编辑器创建并保存为文本文件,文件名就是helloc.c。源程序实际上就是一个由0和1组成的位(又称为比特)序列,这些位被组织8个一组,称为字节。每个字节都表示程序中某个文本字符。大部分的现代系统都使用ASC码标准来表示文本字符,这种方式实际上就是用一个唯一的字节大小的整数值来表示每个字符。下图给出hello.c

2011-11-09 20:42:29 1604 1

原创 页面置换 读操作系统概念第六版

页面置换:如果没有空闲帧,那么就找当前不在使用的帧,并使之空闲。可以这样来释放一个帧:将其内容写到交换空间,并改变页表(和所有其他表)以表示该页不在内存中。1:查找所需页在磁盘上的位置。2:查找一空闲帧:a:如果有空闲帧,那么就是用它。b:如果没有空闲帧,那么就是用也置换算法以选择一个“牺牲”帧。c:将“牺牲”帧的内容写到磁盘上;改变页表和帧表。3:将所需页读入(新)空闲帧

2011-11-08 19:49:28 755

原创 请求页面调度 读操作系统概念第六版

请求页面调度系统类似于分页系统加上交换。进程驻留在次级存储器上(通常为磁盘)。当需要执行进程时,将它换入内存。不过,不是将整个进程换入内存,而是使用lazy swapper。lazy swapper只有在需要页时,才将它调入内存。由于将进程看做一系列的页,而不是一个大的连续空间,因此使用“交换”从技术上来讲并不正确。交换程序对整个进程进行操作,而调页程序只是对进程的单个页进行操作。因此,在讨论有关

2011-11-07 20:55:19 3259

原创 插入算法 二分搜索 读数据结构与算法-C++

2011-11-06 21:19:12 446

原创 虚拟内存 读操作系统概念第六版

虚拟内存技术允许进程的执行不必完全在内存中。这种方案的一个很大的优点就是程序可以比物理内存大。而且,虚拟内存将内存抽象成一个巨大的、统一的存储数组,进而将用户看到的逻辑内存与物理内存分开。这种技术允许程序员不受内存存储的限制。虚拟内存也允许进程很容易地共享文件和地址空间。 程序通常有处理异常错误条件的代码。由于这些错误即使有也是很少发生,所以这种代码几乎不执行。数组、链表和表通常分配了

2011-11-06 18:53:58 1246

原创 解读城市

没有机遇,没有惊才,难以留在城市;没有技能,难以谋生,即使积累再丰富,坐吃山空,几代甚至几十代,也会离开城市。 别给自己太多的压力,前路一片荆棘,走到最后的人寥寥无几,都抱着雄伟壮志,挫伤的心远比自豪的多。

2011-11-05 17:18:45 465

原创 搜索算法 读数据结构与算法

2011-11-04 20:36:34 334

原创 分段 读操作系统概念第六版

采用分页内存管理有一个不可避免的问题:用户观点的内存和实际内存的分离。用户观点的内存和实际内存不一样。用户观点的内存需要映射到实际内存。该映射允许逻辑内存和物理内存的不同。 想一下你在写程序时是如何考虑程序的。你会认为程序是由主程序加上一些子程序、过程、函数或模块所构成的。还有各种数据结构:表、数组、堆栈、变量等。每个模块或其他数据元素都可以通过名称引用。你会说“符号表”、“函数sqrt”

2011-11-04 19:22:11 740

原创 搜索算法 读数据结构算法与应用-C++语言描述

2011-11-03 21:32:26 420

原创 分页 读操作系统概念第六版

每个操作系统都有自己的方法来保存页表。绝大多数都为每个进程分配一个页表。页表的指针与其他信息(如指令计数器)一起存入进程控制块中。当分派程序需要启动一进程时,它必须首先装入用户寄存器,并根据所保存的用户页来定义正确的硬件页表值。 标准解决是采用小但专用且快速的硬件缓冲,这种缓冲称为翻译后备缓冲器(translation look aside buffer, TLB)。TLB是关联内存根据给

2011-11-03 19:21:25 690

原创 分页一 读操作系统概念第六版

分页(paging)内存管理方案允许进程的物理地址空间可以是非连续的。分页避免了将不同大小的内存块备份到交换空间上的麻烦问题。 物理内存分为固定大小的块,称为帧(frame)。逻辑内存也分为同样大小的块,称为页。当进程需要执行时,其页从备份存储中调入到可用的内存帧中。备份存储也分为固定大小的块,其大小与内存的帧一样。由CPU所生成的每个地址分为两个部分:页码(p)和页偏移(d)。页号作

2011-11-02 20:07:50 712

原创 连续内存分配 读操作系统概念第六版

内存通常分为两个区域:一个用于驻留操作系统,另一个用于用户进程。保护操作系统不受用户进程所影响,保护用户进程不受其他用户进程所影响。通过采用重定位寄存器和界限寄存器,可以实现这种保护。重定位寄存器含有最小的物理地址值;界限寄存器含有逻辑地址的值。有了重定位寄存器和界限寄存器,每个逻辑地址必须小于界限寄存器;MMU动态地将逻辑地址加上重定位寄存器的值后映射为物理地址。映射后的物理地址在送交内存单

2011-11-01 20:10:01 833

转载 [转]50个c/c++源代码网站

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建 议,以进一步加强这方面的清单。 添加:http://www.boost.org/1、http://snippets.dzone.com/tag

2011-11-01 10:10:10 417

原创 地址捆绑 读操作系统概念第六版

通常,程序以二进制可执行文件形式存储在磁盘上。为了执行,程序应被调入内存并放在进程内。根据所使用的内存管理方案,进程在执行时可以在磁盘和内存之间移动。在磁盘上等待调入内存以便执行的进程形成了输入队列。通常的步骤是从输入队列中选一个进程并装入内存。进程在执行时,会访问内存中的执行中的指令和数据。最后,进程终止,其地址空间将被释放。CPU所生成的地址通常称为逻辑地址,而内存单元所看到的地址(即

2011-10-30 21:41:07 723

线性表课件---帮助大家学习数据结构

主要是线性表的用法,其中还有点数据结构的知识点

2008-10-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除