句柄
句柄是windows用来标识应用程序实例使用的对象的唯一整数。
类似C语言中的文件句柄。
句柄的本质是一种指向指针的指针。应用程序启动后,组成这个程序的各对象是驻留在内存的。那是否我们获知了这个内存的首地址,就可以随时用这个地址访问对象呢?
答案是否定的,因为windows是一个以虚拟内存为基础的操作系统,在这种系统环境下,windows内存管理器经常在内存中来回移动对象,依此满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。那我们该如何去找这个对象呢?
windows为各应用程序腾出一块固定的内存,用于记录各应用对象在内存中的地址变化,windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。我们只需要记住这个句柄地址就可以间接知道对象具体在内存中的位置。这个句柄地址是对象装载时由系统分配的,当系统卸载时又释放给系统。
由上可知,windows程序并不是用物理地址来标识一个内存块的,相反的,windows给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作
CPU三级缓存
1.1 存储器的金字塔结构
现代计算机系统为了寻求容量、速度和价格最大的性价比会采用分层架构,从 “CPU 寄存器 - CPU 高速缓存 - 内存 - 硬盘”自上而下容量逐渐增大,速度逐渐减慢,单位价格也逐渐降低。
1、CPU 寄存器: 存储 CPU 正在使用的数据或指令;
2、CPU 高速缓存: 存储 CPU 近期要用到的数据和指令;
3、内存: 存储正在运行或者将要运行的程序和数据;
4、硬盘: 存储暂时不使用或者不能直接使用的程序和数据。
存储器金字塔
在 CPU Cache 的概念刚出现时,CPU 和内存之间只有一个缓存,随着芯片集成密度的提高,现代的 CPU Cache 已经普遍采用 L1/L2/L3 多级缓存的结构来改善性能。自顶向下容量逐渐增大,访问速度也逐渐降低。当缓存未命中时,缓存系统会向更底层的层次搜索。
L1 Cache: 在 CPU 核心内部,分为指令缓存和数据缓存,分开存放 CPU 使用的指令和数据;
L2 Cache: 在 CPU 核心内部,尺寸比 L1 更大;
L3 Cache: 在 CPU 核心外部,所有 CPU 核心共享同一个 L3 缓存。
CPU的处理速度 Ghz
频率的单位是赫兹,简称赫,以符号“Hz”表示。常用的频率单位有千赫(kHz)、兆赫(MHz)、吉赫(GHz)等。赫兹(H·Hertz)是德国著名的物理学家。1887年,他通过实验证实了电磁波的存在。后人为纪念他,将“赫兹”设为频率的单位。
GHz即十亿赫兹(10^9 Hz 10 0000 0000Hz)。GHz是CPU的处理频率,换言之,即CPU的处理速度。现今大多CPU是多核的,如双核、4核、8核、16核等。但主频并不是以核心数乘以单核主频。主频值愈大,CPU的运行速度不一定愈强。决定CPU性能的还有架构、缓存等。像奔腾G4400@3.3GHZ的性能就没有i5 8400@2.8GHZ的性能好。此外,其还用于表微处理器的时钟频率。内存现多以“MHz”为单位。