如何编写64位应用程序

如何编写64位应用程序,第1张

64位程序是指在64位 *** 作系统的编写的程序,根使用什么语言没有太多的关系,有些数据类型的位数可能有变化。

64位 *** 作系统是指特别为64位架构计算机系统而设计的 *** 作系统。“位”,简单地理解就是CPU的寻址空间,实际上包括整个计算机系统架构数据处理位数。

用 Visual C++ 创建在 64 位 Windows *** 作系统中运行的应用程序时,应注意以下问题:

在 64 位 Windows *** 作系统中,int 和 long 是 32 位值。

在 64 位 Windows *** 作系统中,size_t、time_t 和 ptrdiff_t 是 64 位值。

在 32 位 Windows *** 作系统中,time_t 是 32 位值。

应注意代码在哪里采用 int 值和将其作为 size_t 值或 time_t 值处理。数字有可能增长得比 32 位数大,并且数据在被传递回 int 存储时有可能被截断。

%x(十六进制 int 格式)printf 修饰符在 64 位 Windows *** 作系统中不按预期的那样工作;它只对传递给它的值的前 32 位进行 *** 作。

Windows 32 位 *** 作系统使用 %I32x 显示整数。

Windows 64 位 *** 作系统使用 %I64x 显示整数。

%p(指针的十六进制格式)在 64 位 Windows *** 作系统中按预期的那样工作。

64位应用程序的执行效率要比32位应用程序高的多。随着64位 *** 作系统的逐渐普及,64位应用程序也必将随之风靡。在Visual Studio中也已经支持了64位应用程序的开发。笔者在这里就将其开发要点做一下总结。权当作抛砖引玉,跟大家切磋一下。

一、确定在64位 *** 作系统上运行还是在WOW64下运行。

在Visual Studio平台中最后对64位应用程序编译时,需要指定这个应用程序是在64位 *** 作系统上作为本机应用程序运行还是在WOW64环境下运行。这个WOW64环境是一个由 *** 作系统提供的兼容性环境。这个环境主要是让32位应用程序也能够在64位的 *** 作系统上运行。换句话说,在编译时要确定产生的应用程序是真正的64位应用程序(只能够在64位 *** 作系统上运行),还是伪64位应用程序(其实是32位应用程序,只是可以借助WOW64在64位 *** 作系统上运行)。

在确定这个内容的时候,有一个内容笔者要特别提醒大家。通常情况下在64位 *** 作系统上,所有使用NET Framework 1.1以前版本生成的应用程序都将被视作为32位应用程序,并且始终在32位公共语言运行上的WOW64环境下运行而在2.0版本以后生成的32位特定应用程序可以在64位平台上的WOM64环境下运行。这两个版本之间的细微差异,各位读者可以开发一个小程序测试一下即可。其中的内涵是只可意会、不可言传呀。

二、正确部署Visual Studio开发环境。

在开发64位应用程序之前,需要明白一点。到目前为止,Visual Studio 2008仍然是一个32位的应用程序。在安装部署时,如果是在X86的计算机上(32位 *** 作系统),则其将安装32位的CLR版本。而如果在64位 *** 作系统上安装部署时,安装进程将同时安装32位的CLR版本和合适的64位CLR。注意当将其部署到64位 *** 作系统的时候,它将在WOW64环境下运行。

此时笔者认为需要注意一个细节问题。当在Wom64环境下运行32位应用程序时,应用程序只限于在一个处理器上执行。也就是说应用程序不能够享受64位 *** 作系统所带来的性能上的提升。而单处理器执行会降低32位应用程序在基于Itanium系统上运行时的性能和可伸缩性。为此如果对于性能要求比较高的应用程序或者有负载比较高的服务器,尽量不要采用兼容的方式。即32位应用程序在32位 *** 作系统上运行,而不要在Wom64环境下运行。否则的话,不但不能够享受64位 *** 作系统带来的好处,反而会降低应用程序原有的性能,得不偿失。

三、32位应用程序在64位CLR上运行可能导致意外的结果。

虽然64位 *** 作系统提供另一个WOW64环境,使得32位应用程序能够在64位 *** 作系统上运行。也就是说,在大部分情况下32位应用程序可以在32位或者64位 *** 作系统上同等的运行,其最终的结果都是相同的。但是有时候也会有意外。这些意外主要是以下原因所造成的。

如在应用程序的结构中包含一些大小随平台而改变的成员。如指针类型的对象,其会 *** 作 *** 作系统位数的不同而改变。再如指针算法中如果包含固定大小,或者不正确的平台调用与COM声明等等,都会导致32位应用程序在64位CLR上运行出现一些意外的结果。

为此笔者特别提醒,如果开发人员设计一些兼容的应用程序时(即可以同时在32位与64位应用程序上运行),必须要注意这些因素对应用程序运行过程的影响。在开发中,要尽量避免使用这些对象,以免不必要的麻烦。

四、如何判断某个应用程序是否适合在64位 *** 作程序上运行。

在应用程序开发时,开发人员可能会借鉴已有的应用程序。此时他们就需要判断手中的应用程序能否在WOW64环境下运行。或者说,只有在特定的平台下,如32位 *** 作系统或者64位 *** 作系统下(而不是WOM64)下运行。要实现这个目的的话,开发环境提供了一个Corflags的命令。简单的说,在命令行中使用corflags.exe可以确定某个exe或者dll是仅仅在特定平台上运行,还是只可以在WOW64环境下运行。另外在必要的情况下,程序开发人员还可以利用这个命令来更改应用程序的平台状态。

五、调试64位应用程序与32位应用程序之间的差异。

在开发平台中自带有应用程序的调试工具。应用程序调试一般包括本地调试与远程调试。对于一些中大型的应用程序而言,远程调试是必须的。这里需要注意,在任何情况下,如果在64位计算机上安装远程调试都会同时安装32位和64位版本的远程调试监视器。不过在调试64位应用程序的时候,则必须要选择正确的版本。如需要选择“远程调试器X64)。否则的话,调试结果会有偏差。

Java运行64位程序

安装好java jdk 就可以运行

最好可以的话安装开发的位元版本,有时候开发用32位元

(1):所需内存超过4g,需开启64位标记 

$   java -showversion  -d64   -Xmx6g HelloWorld 

java version "1.6.0_07" 

Java(TM) SE Runtime Environment (build 1.6.0_07-b04) 

Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode) 

Hello world! 

(3):系统平台不支持64位时会提示: 

Running a 64-bit JVM is not supported on this platform.

(4):物理内存不够时会提示: 

Error occorred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine. 

总结:开启64位标记在Linux下使用-d,win32下使用-D。(linux jdk1.5,1.6win32 jdk1.6经过测试)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7785943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存