摘要: CPU为了更快的执行代码。于是当从内存中读取数据时,并不是只读自己想要的部分。而是读取足够的字节来填入高速缓存行。根据不同的CPU,高速缓存行大小不同。如X86是32BYTES,而ALPHA是64BYTES。并且始终在第32个字节或第64个字节处对齐。这样,当CPU访问相邻的数据时,就不必每次都从内存中读取,提高了速度。 因为访问内存要比访问高速缓存用的时间多得多。但是,多核发达的年代。情况就不能那么简单了。试想下面这样一个情况。1、 CPU1读取了一个字节,以及它和它相邻的字节被读入CPU1的高速缓存。2、 CPU2做了上面同样的工作。这样CPU1,CPU2的高速缓存拥有同样的数据。3、 C 阅读全文
posted @ 2010-07-02 09:07 麒麟子MrKylin 阅读(940) 评论(0) 推荐(0) 编辑
摘要: WINDOWS中定义了一个CONTEXT结构,该结构包含了特定处理器上的寄存器数据。系统使用CONTEXT结构执行各种内部操作。目前,已经存在为Intel、MIPS、Alpha和PowerPC处理器定义的CONTEXT结构。若要了解这些结构的定义,可以去看WinNT.h。该结构并没有说明结构体内的成员,也没有描述这些成员是谁,因为这些成员要取决于WINDOWS运行在哪个平台上。在WINDOWS定义的所有数据结构中,CONTEXT结构是特定于CPU的唯一结构。在CONTEXT结构中,它包含了主机CPU上的每个寄存器的数据结构。在X86计算机上,数据成员是EAX,EBX,ECX,EDX等等。如果是 阅读全文
posted @ 2010-07-02 08:47 麒麟子MrKylin 阅读(820) 评论(0) 推荐(0) 编辑
摘要: 关于VOID Sleep(DWORD dwMilliseconds);函数,许多人都觉得,它是告诉系统,延迟多少毫秒来执行后面的代码。但是,在WINDOWS这样的非实时多任务系统中,我们是无法估算会睡眠多久的。因为一个线程不是总是被执行的。它会在执行一段时间后,被系统暂停,然后系统又去执行另外的线程代码。于是,Sleep函数的解释如下:当调用Sleep函数的时候,比如Sleep(400);它告诉系统,此线程将放弃此次运行的时间片,比方说现在线程只执行了10ms,按“有关部门规定”它被唤醒一次是要执行20ms的。这时它就说,这次机会我放弃,后面的10ms不要了。下次轮上我再叫我。 这样,系统便会 阅读全文
posted @ 2010-07-02 00:22 麒麟子MrKylin 阅读(1478) 评论(0) 推荐(0) 编辑
摘要: 线程由两部分构成:线程内核对象:操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。线程堆栈:它用于维护线程在执行代码时需要的所有函数参数和局部变量。我们必需要知道一个事实-----进程(WINDOWS中)是不能被调度的。通常所说的调度,都是对线程而言的。进程仅仅是线程的容器,是系统统分配资源的单位。 这样,线程自身不会分配资源。同一进程中的多个线程共同使用它们父进程的资源。一个进程至少需一个线程,如果一个进程中不存在线程(所有线程都退出)。则系统认为这个进程没有存在的必要,于是便会撤消这个进程,并释放他占用的资源。在VC环境中,我们可以调用CreatThread来创建一 阅读全文
posted @ 2010-07-02 00:07 麒麟子MrKylin 阅读(2437) 评论(0) 推荐(0) 编辑