摘要:
转载自:http://oss.org.cn/html/index.html1、8个32位的通用寄存器EAX一般用作累加器EBX一般用作基址寄存器(Base)ECX一般用来计数(Count)EDX一般用来存放数据(Data)ESP一般用作堆栈指针(Stack Pointer)EBP一般用作基址指针(Base Pointer)ESI一般用作源变址(Source Index)EDI一般用作目标变址(Destinatin Index)2、8个调试寄存器3、6个16位的段寄存器CS代码段寄存器DS数据段寄存器SS堆栈段寄存器ES、FS及GS附加数据段寄存器4、4个32位的控制寄存器 这几个寄存器中保存. 阅读全文
摘要:
虚拟地址空间物理存储器: 物理内存 + 页文件进程拥有堆,堆默认是1M,但是可以根据需要,通过堆管理器调用VirtualAlloc来分配。线程拥有栈,栈默认是1M,从高到第地分配。new 和 malloc是在堆空间中分配空间,但是他们会有一个加锁的过程,保证堆只被一个对象所拥有。在windows环境下,其分配粒度大小均为64k。那么,我们可以把整个虚拟内存空间看作是由一个个以64k为边界的64k大小的内存页面组成。如果用VirtualAlloc来申请内存,不管申请多大,内存管理器都会把整张整张的页面给你,即使你只申请一个字节的内存,内存管理器也会把一个64k大小的未用的页面返回给你,这样势必会 阅读全文
摘要:
转载自:http://www.cnblogs.com/cbf4life/archive/2009/12/15/1624435.html依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. De 阅读全文
摘要:
转载自:http://zg0423.blog.163.com/blog/static/2059840162013227111717916/可参考:http://hi.baidu.com/121308030/item/134350849bd568cfee083dfd http://www.cnblogs.com/sunwei2012/archive/2010/03/10/1682415.html http://www.oodesign.com/liskov-s-substitution-principle.html我们都知道面向对象有三大特性:封装、继承、多态。所以我们在实际开发过程... 阅读全文
摘要:
转载自:http://www.cnblogs.com/cbf4life/archive/2009/12/11/1622166.html 参考:http://www.oodesign.com/single-responsibility-principle.html 单一职责原则的英文名称是Single Responsibility Principle,简称是SRP。这个设计原则备受争议,只要你想和别人争执、怄气或者是吵架,这个原则是屡试不爽的。如果你是老大,看到一个接口或类是这样或那样设计的,你就问一句:“你设计的类符合SRP原则吗?”,保准对方立马“萎缩”掉,而且还一脸崇拜地看着你,心... 阅读全文
摘要:
转载自:http://blog.csdn.net/wangjunhe/article/details/7180323内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。 因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存以小且不连续方式出现在不同的位置。因此这个问题的或大或 阅读全文
摘要:
步骤: 1、创建一个void CALLBACK OverlappedRountine(PTP_CALLBACK_INSTANCE pInstance,PVOID pvContext,PVOID pOverlapped,ULONG IoResult,ULONG_PTR NumberOfBytesTransferred,PTP_IO pIo)类似的函数 2、打开一个文件 3、CreateThreadpoolIo,创建一个IO线程池 4、在调用异步操作前都调用一下StartThreadpoolIo这个函数 5、WaitForThreadpoolIoCallbacks(pIo, FALSE)... 阅读全文
摘要:
步骤: 1、创建一个类似于void CALLBACK WaitCallBack(PTP_CALLBACK_INSTANCE pInstance,PVOID pvContext, PTP_WAIT pcbe,TP_WAIT_RESULT WaitResult)的函数 2、创建一个内核对象 3、CreateThreadpoolWait,创建等待 4、SetThreadpoolWait,设置等待 5、CloseThreadpoolWait、关闭内核对象注意: 1、一次SetThreadpoolWait,一次调用回调函数代码: #include #include using namesp... 阅读全文
摘要:
步骤: 1、创建一个类似于void CALLBACK TimeoutCallBack(PTP_CALLBACK_INSTANCE pInstance,PVOID pvContext,PTP_TIMER pcbe)的函数 2、CreateThreadpoolTimer 3、SetThreadpoolTimer 4、CloseThreadpoolTimer理解: 其实就是相当于一个可等待的内核对象,不可在实现上,采用了线程池的技术。代码:#include #include using namespace std;void CALLBACK TimeoutCallBack( PTP_CAL... 阅读全文
摘要:
转载自:http://blog.chinaunix.net/uid-11572501-id-2868694.html为什么需要线程池?目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。传 统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出,这就是是“即时创建,即 时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于 不停的创建线 阅读全文