c++-开发32位程序和64位程序有什么区别?假设用C++开发

问题描述

开发32位程序和64位程序有什么区别?假设用C++开发

假设现要开发一个win程序,用C++语言,那么开发我32bit程序跟开发64bit程序有什么区别?

解决方案

你是问开发有什么不同,ok,其实google一下答案就有了。
1. 首先数据类型不一样
在32位平台整型啊,指针啊都是32位的,到64位平台就是64位了,你要注意这个区别,比如溢出。
还有一些数据结构变化了,比如time_t,你的小心。
浮点数的结构也在32和64也不太一样
2. 数据转换发生了变化,比如在32位平台做以下操作没什么问题,可是64位就会得到一个截断的指针
a=(char *) calloc(25);
3. 结构的对齐也发生了变化,32位的结构是4字节对齐,64位是8字节了。
。。。

解决方案二:

x64程序会在高精度浮点运算和整数运算方面获得性能的提高。同时x64程序可以直接访问更大的内存。
对于一般的商用软件,没有什么区别。

解决方案三:

32位的CPU(准确的说是运行在32位模式下的CPU)只能寻址最大4GB的内存,受制于此,32位的操作系统也只能识别最大4GB的内存,由于在系统中,除了内存之外,还有很多存储设备,因此,真正可以利用的内存空间肯定小于4GB,也就是我们看到的系统属性中显示的3.xxG。
  但64位CPU则有了很大改变,64位CPU的最大寻址空间为2的64次方bytes,计算后其可寻址空间达到了惊人的16TB(treabytes),即16384GB。当然,这只是理论,从实际应用上,Windows 7 64bit的各版本分别为8GB-192GB,其中,家庭普通版能支持8GB内存,家庭高级版能支持16GB内存,而64位的Windows 7专业版、企业版和旗舰版最高可支持192GB内存。
  也就是说,内存大于等于4GB的用户,由于受到32位硬件限制,因此,不能最大化的利用硬件资源,这就很有必要安装64位操作系统以最大化利用资源。
  需要注意的是,64位系统需要64位CPU的支持,在安装64位Windows 7前请先确认你的CPU是否支持64位,一般而言,2006年之后购买的CPU均支持64位模式。
  如果仅考虑这点,对于内存小于4GB的用户,32位Windows 7更适合大家使用,因为64位版本会占用更多的系统内存资源,起的作用适得其反了。
接下来我们再来考虑运算性能,这也是很多网友非常关注的。
  理论上,64位平台上的运行性能要远超过32位平台。原因在与CPU通用寄存器的数据位宽,64位平台是64位,而32位平台是32位,也就是说,64位平台可以运行64位数据指令,处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。
  相信看到这里,又会有很多用户动摇了,甚至有很多内存不足4GB的网友们想要体验下64位Windows 7的威力,但仍然有个问题。
在64位Windows 7下运行32位的应用软件并不会让你感觉到性能的飞跃,只有64位的应用软件才能最大化发挥64位平台的优势。但显而易见,目前64位的应用程序在种类的数量上都要远低于32位平台,不过值得高兴的是,越来越多的软件开发者开始将他们的软件移植到64位平台上。
  至少在当前,仍然有很多软件不兼容Windows 7 64位版本,这一切需要时间来解决。
  从上面我们可以看到,选择32位系统还是64位系统并不是由一个因素就能决定的,我们需要考虑到多方面的因素,再结合自己应用和硬件的实际情况,做出选择。

解决方案四:

“理论上,64位平台上的运行性能要远超过32位平台。原因在与CPU通用寄存器的数据位宽,64位平台是64位,而32位平台是32位,也就是说,64位平台可以运行64位数据指令,处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。”

这种说法没什么根据。我们知道商业程序和游戏软件,整数运算、逻辑判断占了很多。而这些运算其实32位足够了,扩展成64位既不能减少执行指令的条数,也不能提高单位时间执行指令的数量,所以运算速度不会发生任何改变。

什么情况下会提高?我说了,数据密集型程序、科学计算。在这些计算中,64位指令每条能处理的数据更多。这意味着处理相同数据或者精度的计算,需要的指令变少了。因为处理器的时钟频率一定,所以性能提高了。但是这种应用占了计算机用途的很少部分。

甚至,在实际环境中,还可能出现64位反倒性能不如32位的情况,这是因为64位的指令和数据更占用内存、缓存和数据传输带宽,而对于一台计算机,这三者是确定的。换一句话说,你用64位算1+1,计算机白白得多用32位存储单元去存储高位的那些0,白白浪费电能而已。

说完理论再说实践。如果你对比常见软件(Photoshop、Office、Windows等等都有32位和64位版),你很难发现64位版的系统有速度提高的迹象。

时间: 2024-12-30 13:41:30

c++-开发32位程序和64位程序有什么区别?假设用C++开发的相关文章

使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表

原文:使用.netFx4.0提供的方法解决32位程序访问64位系统的64位注册表   我们知道目标平台是32位的程序运行在64位的系统上,去访问部分注册表的时候系统自动重定向到win32node节点对应的项去了.但是做过安装程序开发人员可能遇到过"需要去掉重定向"的问题,即直接访问64位程序的注册表. 网上有很多winAPI的方法,关闭注册表的重定向稍微复杂.(关闭文件系统的重定向稍微简单些,搬过来就可以用:关闭注册表的重定向我现在没看懂.) 我这里提供的方法不需要关闭重定向,也不需要

关于32位系统和64位系统运行asp。net程序的兼容性问题。

问题描述 我现在做了一个asp.net网站,用的C#.vs2008开发环境,操作系统是windowsserver2008x32.数据库:oracle10g.运行一切正常.现在客户换了一台服务器,装windowsserver2008X64版本.不知道我的这个网站部署到64位的系统是有问题没有.如果有兼容问题,该怎么解决. 解决方案 解决方案二:如果程序是纯.NET写的,完全没有问题.如果程序使用了32bit的dll或者activex组件,那么需要把程序集编译成32bit.解决方案三:网页中有一个f

C# 32位程序访问64位系统注册表

原文:C# 32位程序访问64位系统注册表 我的上一篇文章已经阐述了"32位程序和64位程序在64位平台上读\写注册表的区别",那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注册表(即:64位程序所访问的注册表位置). 我们已经知道: ①:本机模式 64 位程序运行在纯模式下,并且访问键和存储在以下注册表子键中的值:HKEY_LOCAL_MACHINE\Software ②:32 位程序运行在 WOW64 模式下,并且访问键和值存储在以下注册表子项中:HKEY_

VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法_vb

通常用VB 写的程序在32位系统上可以正常的运行,但到了64位系统中虽然可以运行但是无法修改OEM信息.经过查找原因可以发现,当我们在访问文件夹"SYSTEM32"的时候系统会自动转向到文件夹"SYSWOW64"下,当我们在访问某些注册表键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面. 先来谈谈文件系统的转向,查找了一些资料,并没有VB相关的资料,但是可以查到2个相关函数:Wow64DisableWow64FsRedirect

32位程序对64位进程的远程注入实现

本文讲的是32位程序对64位进程的远程注入实现, 0x00 前言 要对指定进程进行远程注入,通常使用Windows提供的API CreateRemoteThread创建一个远程线程,进而注入dll或是执行shellcode. 在64位系统下,该方法需要特别注意,注入的目标进程要同程序的结构保持一致,即32位程序只能对32进程作注入,64位程序只能对64位进程作注入,32位程序对64位程序进行注入时会失败(32位和64位的结构不同). 然而,在某些特殊的环境下,无法提前预知目标进程的结构,准备两个

Win7 32位系统和64位系统有什么区别

  首先,相信选择64位Windows7的网友中很有大比例是内存大于或等于4GB的.在32位Windows7下,可能会显示内存可使用3.25G,这让很多网友感到不安.没错,可寻址的内存空间确实是32位Windows7和64位Windows7最为显著的特点. 32位的CPU(准确的说是运行在32位模式下的CPU)只能寻址最大4GB的内存,受制于此,32位的操作系统也只能识别最大4GB的内存,由于在系统中,除了内存之外,还有很多存储设备,因此,真正可以利用的内存空间肯定小于4GB,也就是我们看到的系

Windows 7系统迁移指南——从32位过渡到64位

Windows--包括http://www.aliyun.com/zixun/aggregation/34065.html">WindowsXP,Vista,Windows 7以及该操作系统的服务器版本--已经从32位过渡到了64位.硬件制造商有足够的时间为其产品提供32/64位的驱动程序. 事实上,我们现在买到的几乎每个扫描仪,打印机,视频摄像头或其他硬件设备都能提供这两种平台的驱动.因此如果我们添置一套新设备时无需担心兼容问题.但是如果我们要将以前购买的打印机,扫描仪或摄像头进行迁移,

Windows 7 32位系统和64位系统有区别是什么

选择64位Windows7系统是因为很内存大于或等于4GB的.在32位Windows7下,可能会显示内存可使用3.XXG,可寻址的内存空间是32位Windows7和64位Windows7最为显著的特点.32位的CPU(准确的说是运行在32位模式下的CPU)只能寻址最大4GB的内存,受制于此,32位的操作系统也只能识别最大4GB的内存,由于在系统中,除了内存之外,还有很多存储设备,因此,真正可以利用的内存空间肯定小于4GB,也就是我们看到的系统属性中显示的3.xxG.但64位CPU则有了很大改变,

32位系统和64位系统有什么含义

电脑的发展史是从以前的8位.16位发展到先的32位和64位,位数是用来衡量计算机性能的重要标准之一.位数在很大程度上决定着计算机的内存最大容量.文件的最大长度.数据在计算机内部的传输速度.处理速度和精度等性能指标. 32位系统是指在操作系统针对32位的cpu设计,就是32处理器一次性能处理32位也就是4字节的数据,而64系统是操作系统针对64位的cpu设计,就是一次性能处理64位也就是8位字节,在这里在工作频率相同的前提下,64位的cpu处理速度就比32位的高一倍.当然这只是32位系统和64位系