字符存储
Unicode:使用2字节对文本进行编码,也称为宽字节
小端序:高位字节放入低地址,低位字节放入高地址(x86架构CPU采用)
大端序:低位字节放入低地址,高位字节放入高地址(网络协议传输采用)
win16:用于16位的windows的API(Windows 1.0 ~ Windows 3.0)
win32:用于32位的windows的API(Windows 9x/NT/2000/xp/7/10)
windows内部全部使用Unicode字符集,当调用ANSI版本的API时,传入的ANSI字符集会被内部转换为Unicode字符集,再调用Unicode版本的API
WOW64
C:\Windows\System32\
文件夹存储64位原生的系统映像文件
C:\Windows\SysWOW64\
文件夹存储了为了兼容32位操作系统的32位系统映像文件
64位应用程序会加载System32目录下64位的Kernel32.dll、user32.dll、ntdll.dll
32位应用程序加载时,由WOW64建立32位ntdll.dll所要求的启动环境:
- 将CPU模式切换到32位
- 执行32位的应用程序加载器
WOW64会将32位程序对ntdll.dll(32位)的调用重定向到ntdll.dll(64位),而不是发出原生的32位系统调用
WOW64不支持加载32位内核模式的设备驱动程序,只支持加载32位的DLL,64位的DLL由64位系统原生支持
Widows消息机制
Windows由两种消息队列:系统消息队列、应用程序消息队列
事件发生 -> 消息放入系统消息队列 -> 经过分拣 -> 复制到应用程序消息队列 -> 应用程序消息循环检索消息 -> 处理消息
虚拟内存
虚拟地址空间与实际的物理内存无任何联系
32位操作系统中,每个32位进程拥有4GB的虚拟地址空间,互不干扰
64位操作系统中,每个64位进程拥有16TB的虚拟地址空间,互不干扰
每个应用程序虽然共拥有4GB的虚拟地址空间,但每个应用程序本身只能使用2GB的虚拟地址,剩下的2GB留给操作系统使用