向64位编程进发

老板买了台DELL 2950服务器,配了2个四核至强CPU,32G内存。我装了64位的VISTA,主要是图个使用方便,相信其底层内存管理代码与Server不会有实质区别。以后该测下Windows Server 2008和Linux 64位版。

开发工具用的是Visual Studio 2008 Professional Edition (x86 and x64 WoW)加Intel C++ for Intel64。

第一个问题,是搞清到底什么是64位平台。现在Intel实际用三个架构的CPU,分别命名为:

IA32:这个是身边常用的CPU。微软管这个叫x86

IA64:看起来好象是IA32升级到64版,但这是误导。这是安腾(Itanium)CPU,高端服务器用的,我们基本接触不到,其指令集与IA32也不兼容。

Intel64:这个是最Tricky的名字了。这才是目前我们嘴里说的64位CPU,是IA32架构加了EM64T内存管理进化而来的。我的理解是它可以用64位寻址,但内部还是32位。好象AMD的64位才是纯的64位。微软管这个叫x64

总之,很乱很暴力。

第二个问题,建一个64位的项目。装好的VS2008并不能识别平台,自动建64位的项目。需要在Configuration Manager里手工添加。在这儿我浪费了很多时间,最后在当前项目列表里加上“x64”平台,才过了这关。

第三个问题,内存分配!如同这个Intel64其实是IA32架构的补丁版一样,Windows的64位也是补丁出来的。内部还是有很多32位的遗迹,结果就是莫名其妙的限制。我遇到了是静态内存分配不能过2G,要用动态分配才行。这里,好象VC++编译、链接是不报错的,运行时才报。而Intel C++在链接的时候就报错了,比VC++好些。(也许这个结论有误!)

第四个问题,在Debug模式下,Intel C++还报缺库libmmdd.dll,要手工配置改过才行。Release模式下则没事儿,所以这是Intel C++的Bug。

实际运行,默认配置下好象Intel C++比VC++还要慢一些。

总之,目前这个所谓Intel 64位架构、Windows 64位其64位开发平台并没有想象中那么好,还是很不成熟的。想尝鲜,则当小白的命运是不可避免的,要做好心理准备。

Advertisements
此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s