写这篇blog主要解决以下疑问:
- vs配置管理器的位数选择和电脑系统的位数什么关系?
- vs配置管理器的位数选择有什么区别?
- vs配置管理器的位数选择不同需要注意些什么?
起因
运行别人的一段vs程序,必须使用x64才可以,在此之前从来没有留意过。
vs配置管理器的位数选择和电脑系统的位数什么关系?
首先,关于电脑位数的解释可以参见我的另一篇blog,点击这里链接。
总之就是CPU硬件和操作系统的位数:操作系统分32位和64位两种,电脑cpu也有32位和64位之分,通常64位cpu同时支持32位和64位两种系统的安装,32位cpu只能装32位系统,不支持安装64位系统。
vs配置管理器的位数暂时先不管,我们先明白电脑应用程序和电脑系统位数的区别。
一个普通的应用程序,应用程序编写的时候位数是多少位就是多少位,并不知道最终这个应用程序将被应用于什么样的平台。
目前我们安装的软件大部分不区分电脑系统是32bit还是64bit,为什么?
因为目前绝大部分的软件都是32bit的,几乎所有的电脑操作系统都是32bit或者64bit的。32bit系统支持32bit应用程序是肯定的,64bit的系统也兼容32bit软件,不是说 64 位系统支持 32 位,是因为微软为了兼容实际上把系统文件、系统级程序、注册表都做了 32 和 64 位的两套,并使用一种机制让程序能自动调用对应那一套接口。纯 64 位当然不兼容 32 位了。32 位在 64 位上运行实质上和在 32 位上运行没什么分别,但 64 位软件在 64 位系统运行才能发挥其性能。可以看看64bit操作系统电脑的软件安装盘有Program Files和Program Files (x86),x86的就是32bit软件的安装位置,默认的Program Files是64bit软件安装位置。在32bit系统上只有Program Files。
64bit的软件目前比较少,但是机械设计和分析、三维动画、视频编辑等软件需要有大量内存和浮点数,所以用64bit操作系统和64bit软件会更好,这就是现在adobe系列的软件新的版本都变成了64bit的原因。64bit的软件在32bit的操作系统中是不能用的,只是向上兼容,不能向下兼容。
好了,搞清楚了这个问题下面就可以理解vs的Win32和x64。因为vs是一个软件开发平台,可以选择不同的编译条件形成不同位的软件。从这里也就能知道,只有x64的操作系统上的vs才能在配置管理器中有x64,此外,64bit操作系统还需要vs有装64位程序的编译器。
vs配置管理器的位数选择有什么区别?
vs2015中,右键项目->属性
就会在目标平台下拉框那看到有3个选项,分别是Any CPU(所有平台)、x64、x86。
Any CPU:生成的程序是兼容的。也就是说程序可以同时在32位或者64位系统中运行,推荐使用这个选项。
x64:生成的程序只能在64位系统中运行。如果你的用户用的是32位的系统(比如XP),则运行不了程序。
x32:生成32位程序,由于64位系统也能运行32位的程序,所以这个选项跟Any CPU一样可以同时运行在两种系统中,但效率没有Any CPU高,因为64位的软件跟CPU交互的数据要比32位的接近大一倍。
所以当你要把项目代码转移到另一台计数机时,就要考虑这个问题。假如你原来选择的目标平台是x64,新电脑的系统是32位,当你按F5调试运行时,则跑不起来,这时把目标平台改成Any CPU或者x32就能解决了。
vs配置管理器的位数选择不同需要注意些什么?
注意:如果你的项目引用有32位的dll(c++编译生成的),则只能选择32位平台,否则也会报错,整个项目要保持一致。
在项目调试的过程中,我们可以看到32位与64位程序加载的dll不同。32位程序从system32中加载dll;而64位程序从syswow64中加载dll。
参考链接
本篇blog主要是参考以下网页链接,感谢各位作者的工作。