windows 开发的必要知识

现在的windows 操作系统(7 ,8 ,10)都是windows NT核心的。该核心是支持32位或则64位优先权式多任务(preemptive multitasking)及多线程的图形操作系统。且是运行在x86架构的cpu上面的。

x86是一个指令集架构家族(指令就是cpu中最小的行动单元,也就是汇编语言翻译之后对应的机器码)
x86为CISC(复杂指令集电脑,Complex Instruction Set Computer)。最大的特点是低端字节序(little endian)
CISC对应的是RISC(精简指令集计算,英语:reduced instruction set computing)最常见ARM架构的处理器(基本上所有的只能手机用的都是这个架构),特点位高端字节序(big endian)

动态链接和静态链接

http://www.cnblogs.com/kex1n/archive/2011/09/06/2168435.html
http://www.cnblogs.com/skynet/p/3372855.html
上面的blog很好的解释了两者的关系。

因为我们是在操作系统的上层开发软件,操作系统通过软件驱动很好的解决了硬件适配的问题,在此基础上给我提供了很多api(应用程序接口,英语:Application Programming Interface)而这些api又在各种库中定义了怎么实现的。而这些库又分为静态库和动态库。

windwos 存在3大核心.dll
这代表了Windows的三个主要子系统,它们被称作KernelUserGDI。当子系统的数目在Windows最近版本中增多时,大多数典型的Windows程序产生的函数呼叫仍对应到这三个模块之一。Kernel(32位的KERNEL32.DLL实现)处理所有在传统上由操作系统核心处理的事务-内存管理、文件I/O和多任务管理。User(32位的USER32.DLL实作)指使用者接口,实作所有窗口运作机制。GDI32位的GDI32.DLL实作)是一个图形设备接口,允许程序在屏幕和打印机上显示文字和图形。

字符编码

和字符集有关的专业术语很多,解释起来很麻烦。但是有必要了解一下。先说一说什么是字符集标准。我们都知道计算机中存储的最小单位是bit。那么为了计算机的规格的同一必须有个标准来说明映射关系。比如0100 0001(十进制65)表示A,0110 0001(十进制97)表示a,等等。后来有一个组织叫做ANSI(American National Standards Institute,美国国家标准协会)定义了一种字符集标准,我们统称为ASCII(American Standard Code for Information Interchange,美国信息交换标准码),有26个小写字母、26个大写字母、10个数字、32个符号、33个句柄和一个空格,总共128个字符码。而ASCII的“版本”现在记录在ANSI X3.4-1986字符集——用于信息交换的7位美国国家标准码(7-Bit ASCII:7-Bit American National Standard Code for Information Interchange)。这个标准是7-bit的美国标准,所以世界上别的国家语言中的特殊符号是无法表示的。所有先后有很多组织和公司有发明了新的字符标准来解决这个问题。又过了很久又出现了一个组织叫做ISO(International Standard Organization,国际标准组织)它发明了一种ASCII的变种。代码0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D「为国家使用保留」,而代码0x5E、0x60和0x7E标为「当国内要求的特殊字符需要8、9或10个空间位置时,可用于其它图形符号」。这显然不是一个最佳的国际解决方案,因为这并不能保证一致性。但这却显示了人们如何想尽办法为不同的语言来编码的。后来又经过衍化出现了一种ANSI/ISO 8859-1-1987,即「American National Standard for Information Processing-8-Bit Single-Byte Coded Graphic Character Sets-Part 1: Latin Alphabet No 1」,通常也简写为「Latin 1」。这个标准是之前两个组织的标准的折中处理。一字节中的低7位128个字符还是ASCII标准。这样就还有128位表示别国家的字符了。但是128为怎么可能表示全部国家的字符呢。所有就有了代码页的概念,例如把多出来的128位中填入法语中特殊符号。然后和之前都128个ASCII标准的字符打包在一起,这样还是一个字节。但是我们规定这样打包之后的东西遍上号,如xxx页。这样以后想用法语的特殊字符就加载相应的代码页就可以了。但是这个能回带来一些别的问题。假如不同mac和pc上的法语代码页的编号不一样。所以这样的标准还是有一些问题,讲到这这种代码页机制还是有一些问题。像中国,日本,韩国这样的国家都是使用象形文字,这些文字可远不止128为,这样在代码页的基础上就出现了DBCS(double-byte character set,双字节字符集 )标准。DBCS从256代码开始,就像ASCII一样。与任何行为良好的代码页一样,最初的128个代码是ASCII。然而,较高的128个代码中的某些特殊值一旦出现就表总是跟随着第二个字节。这两个字节一起(称作首字节和跟随字节)定义一个字符,通常是一个复杂的象形文字。虽然中文、日文和韩文共享一些相同的象形文字,但显然这三种语言是不同的,而且经常是同一个象形文字在三种不同的语言中代表三件不同的事。Windows支持四个不同的双字节字符集:代码页932(日文)、936(简体中文)、949(韩语)和950(繁体汉字)。只有为这些国家(地区)生产的Windows版本才支持DBCS。那么说了怎么多,那有什么标准既不是用代码页,也不是用双字节表示的字符集标准。当然有。那就是Unicode字符,准确的来说是windows支持的是utf-16(下面有解释)代码中从0x0000到0x007F就是ASCII字符,而接下来的128个Unicode字符(代码从0x0080到0x00FF)是ISO 8859-1对ASCII的扩展。Unicode中不同部分的字符都同样基于现有的标准。这是为了便于转换。希腊字母表使用从0x0370到0x03FF的代码,斯拉夫语使用从0x0400到0x04FF的代码,美国使用从0x0530到0x058F的代码,希伯来语使用从0x0590到0x05FF的代码。中国、日本和韩国的象形文字(总称为CJK)占用了从0x3000到0x9FFF的代码。Unicode有缺点吗?当然有。Unicode字符串占用的内存是ASCII字符串的两倍。(然而压缩文件有助于极大地减少文件所占的磁盘空间。)但也许最糟的缺点是:人们相对来说还不习惯使用Unicode。身为程序写作者,这就是我们的工作。

看看下面的关键字你能理清楚什么关系吗?
ANSI:(美国国家标准协会American National Standards Institute)发布

ISO:(国际标准化组织 International Organization for Standardization)

ASCII:(美国信息交换标准码American Standard Code for Information Interchange)

代码页 :(code page)

DBCS:(双字节字符集 double-byte character set)。

Unicode

Tips:
Unicode时一种标准,它定义了整型到字符的映射关系。但是如何存储在计算机中呢,这时候就出现了存储的解决方案utf-8,和utf-16,utf32

utf-8
这个在网页源代码上经常能见到的一种标志。在实际存储中一个字符可能是1字节,2字节,3字节,4个字节
utf-16
为2个字节。对于2字节以外的字符符号,utf-16支持surrogate(代理,编程了
4个字节表示)。
utf-32
4个字节

GBK和GB2312都是中文字符编码。因为在创建它的时候没有Unicode这个国际的字符编码,所以各国都和中国一样创建了自己的字符标准。它们都和Unicode是一样都是一种整数和字符的映射关系。其中GBK包含GB2312,是一种扩充

还有很多编码不一一介绍了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值