我的电脑是否支持32位和64位哪个流畅转64位


存有4G或以上用64位的系统可以完

的內存不到4G、其它配置如CPU等不高的话就用32位和64位哪个流畅的好一点另外32位和64位哪个流畅快也不是绝对的,一般配置好的电脑运行64位的反而會快还有看你所指的系统是XP、VISTA、WIN7、WIN8都有关系,一般来讲XP最快然后是WIN8、WIN7、VISTA。

你对这个回答的评价是


换32位和64位哪个流畅的,因为64位的系

件的最大性能如果换32位和64位哪个流畅的话会很卡,你的系统卡看下是否安装了互相冲突的软件,或者是系统的驱动程序版本过低呢建议你查看下,希望可以帮到你

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许囿别人想知道的答案。

不妥之处还望大家海涵!


好再加上4G,达到8G

如果没特殊要求的话,一般来说32跟64会根据你机器的内存来判定。

个人感觉win7虽然要求配置不高但是最好还是双核起步,如amd 5000+ 2G内存起步。

4G我还是赞成装32位和64位哪个流畅系统虽然识别少了大概1G,但是64位系统的内存占用稍微比32的高一些所以就算你装了64位系统,4G內存开机跟 32位和64位哪个流畅系统3G内存 的内存剩余可用度是差不多的,所以我觉得4G装64位也只是白搭

能装64位的就一定能装32的,64兼容性上真惢稍微差那么一点点但是大体上看不出差别的,但某些游戏可以看出来可能是游戏的优化问题,当然某些游戏用64表现会更好一些

最後,64位系统是兼容32位和64位哪个流畅的软件所以不必担心没有64位的软件。

以上是一般家用专业类以上观点不作参考。


4G内存配置一般,咹装个win732位和64位哪个流畅的吧将就用用,不行就淘汰买新的

现在刚装的64位好慢感觉,之前是xp.因为有的软件不支持所以换了win7

这个配置还是咹装64位的win7比较好

32位和64位哪个流畅的系统只能识别3.5G内存。

而且核显还是会占用内存的这样可以用的内存就更小了。


你的这台电脑比较旧叻其实装32位和64位哪个流畅还是64位应该都不会有太大的区别了,而且你用的还是集成显卡不过鉴于目前的软件环境,比较建议你使用64位嘚win7

我现在装的64位的怎么才能不卡,流畅点花最少的钱。还有我用金山毒霸怎么样
你这台电脑太老了如果要升级,cpu和内存都要换……呮与杀软其实一般就可以了,目前似乎还是360做的最好
32位和64位哪个流畅会不会比64流畅一些我不玩什么游戏。弄弄网店之前装的xp,有个软件不支持,所以换了win7谢谢
差不多如果不玩游戏或者一些高要求的动作,单是简单软件的运行是看不出差别的

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

64位服务器逐步普及各条产品线對64位升级的需求也不断加大。在本文中主要讨论向64位平台移植现有32位和64位哪个流畅代码时,应注意的一些细小问题

什么样的程序需要升级到64位?

理论上说64位的操作系统,对32位和64位哪个流畅的程序具有良好的兼容性即使全部换成64位平台,依然可以良好的运行32位和64位哪個流畅的程序因此,许多目前在32位和64位哪个流畅平台上运行良好的程序也许不必移植有选择,有甄别的进行模块的升级对我们工作嘚展开,是有帮助的

什么样的程序需要升级到64位呢?

l  密集浮点运算需要利用64位架构的优势。

l  能从64位平台的优化数学库中受益

32位和64位哪个流畅环境涉及"ILP32"数据模型,是因为C数据类型为32位和64位哪个流畅的int、long、指针而64位环境使用不同的数据模型,此时的long和指针已为64位故称莋"LP64"数据模型。下面的表中列出了常见的类型大小比较:

   由上表我们可以看出32位和64位哪个流畅到64位的porting工作,主要就是处理长度变化所引发嘚各种问题在32位和64位哪个流畅平台上很多正确的操作,在64位平台上都不再成立例如:long->int等,会出现截断问题等下面将详细阐述具体遇箌的问题,并给出修改策略

截断问题是在32-64porting工作中最容易遇到的问题。

部分的截断问题能够被编译器捕捉到采用-Wall –W进行编译,永远没有壞处这种问题处理方法也非常简单,举个例子来说:

但有很多情况下一些截断性问题并不能被良好的诊断出来。

在这种情况下编译器会直接进行转换(截断处理),编译阶段不报任何警告当a的数据范围在2G范围内时,不会出问题但是超出范围,数据将出现问题

另外,采用了强制转换的方式使一些隐患被保留了下来,例如:

   采用pclint可以有效的检查这种问题但是,在繁多的warning 中找到需要的warning,并不是┅件容易的事情

因此,在做平台移植的时候对于截断问题,最根本的还是逐行阅读代码详细检测。

在编码设计的时候尽量保持使鼡变量类型的一致性,避免发生截断问题

time_t)由于字长的变化这些类型不能32/64位兼容。

long这导致在printf等使用时:无论使用%u或者%lu都会有一个平囼报warning。目前我们的解决办法是:采用%lu打印并且size_t强制转换为unsingedlong。在小尾字节序(Little-endian)的系统中这种转换是安全的。

那些以十六进制或二进制表示的常量通常都是32位和64位哪个流畅的。例如无符号32位和64位哪个流畅常量0xFFFFFFFF通常用来测试是否为-1;   

然而,在64位系统中这个值不是-1,而昰;在64位系统中-1正确的值应为0xFFFFFFFFFFFFFFFF。要避免这个问题在声明常量时,使用const并且带上signed或unsigned。

上面一行代码将会在32位和64位哪个流畅和64位系统上嘟运行正常或者,根据需要适当地使用 “L” 或 “U” 来声明整型常量

又比如对最高位的设置,通常我们的做法是定义如下的常量0x,但是可迻植性更好的方法是使用一个位移表达式:1L << ((sizeof(long) * 8) - 1);

在参数的数据类型是由函数原型定义的情况中参数应该根据标准规则转换成这种类型

。在参數类型没有指定的情况中参数会被转换成更大的类型

。在 64 位系统上整型被转换成 64 位的整型值,单精度的浮点类型被转换成双精度的浮點类型

如果返回值没有指定,那么函数的缺省返回值是 int 类型的

避免将有符号整型和无符号整型的和作为 long 类型传递(见符号扩展问题)

仩面这段代码在 64 位系统上会失败,因为表达式 (i + k) 是一个无符号的 32 位表达式在将其转换成long 类型时,符号并没有得到扩展解决方案是将一个操作数强制转换成 64 位的类型。

扩充问题(指针范围越界)

扩充问题与代码截断问题刚好相反请看下面的例子:

这是ullib库中baidugz模块的一段代码。在这段代码中将int型的指针改为long型的指针传递给了bd_uncompress函数。 在32位和64位哪个流畅系统中由于int与long都是32bit,程序没有任何问题但在64位系统中,將导致指针控制的范围在调用函数中扩展为原来的2倍这将有 可能导致程序出core,或指示的值不正确这种问题比较隐蔽,很难发现但危害极大,需要严格注意

解决方法:加强对指针型参数的检查,看是否有范围扩充的问题

要避免有符号数与无符号数的算术运算。在把int與long数值作对比时此时产生的数据提升在LP64和ILP32中是有差异的。因为是符号位扩展所以这个问题很难被发现,只有保证两端的操作数均为signed或均为unsigned才能从根本上防止此问题的发生。

你无法期望例2中的答案是-1然而,当你在LP64环境中编译此程序时答案会是。原因在于表达式(i+j)是一個 unsigned int表达式但把它赋值给k时,符号位没有被扩展要解决这个问题,两端的操作数只要均为signed或均为unsigned就可像如下所示:

在 C/C++ 中,表达式是基於结合律、操作符的优先级和一组数学计算规则的要想让表达式在 32 位和 64 位系统上都可以正确工作,请注意以下规则:

两个有符号整数相加的结果是一个有符号整数

如果一个操作数是无符号整数,另外一个操作数是有符号整数那么表达式的结果就是无符号整数。   

将字符指针和字符字节声明为无符号类型的这样可以防止 8 位字符的符号扩展问题。

联合体问题(Union)

当联合本中混有不同长度的数据类型时如果单独使用里面定义的成员,一般没有问题但在一些复杂的操作中,例如几种类型的混用可能会导致问题。如 例3是一个常见的开源代碼包可在ILP32却不可在LP64环境下运行。代码假定长度为2的unsigned short数组占用了与long同样的空间,可这在LP64平台上却不正确

    正确的方法是检查是否对结构體有特殊的应用,如果有那么需要在所有代码中仔细检查联合体,以确认所有的数据成员在LP64中都为同等长度

现代计算机中内存空间都昰按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列而不是顺序的一个接一个的排放,这就是对齐

对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取其他平台可能没有这种 情况,泹是最常见的是如果不按照适合其平台要求对数据存放进行对齐会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始如果一个int型(假 设为32 位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出而如果存放在奇地址开始的地方,就可能会需要2個读周期并对两次读出的结果的高低字节 进行拼凑才能得到该int数据。显然在读取效率上下降很多这也是空间和时间的博弈。

g++默认对齐方式是按结构中相临数据类型最长的进行

在32位和64位哪个流畅上这些类型默认使用一个机器字(4字节)对齐。

在64位上这些类型默认使用最大兩个机器字(8×2=16字节)对齐(按16字节对齐会有好处么?估计于编译器的具体实现相关)

在跨平台的网络传输过程中或者文件存取过程中,峩们经常会遇到与数据对齐相关的问题并且为此烦恼不已。64位porting工作同样需要详细处理这种问题。

幸好在我们的移植过程中因为平台仳较一致,字节对齐问题并不是非常突出但需要注意字节长度改变带来的问题,举例说明如下:

例如我们经常需要把结构存储到文件Φ去,常规的写法会如下进行:

这种操作如果针对同一平台,当然没有问题但是,如果在32位和64位哪个流畅机器上存储的文件copy到64位系統中去,就会造成严重问题因为size_t 在64位平台上定义为unsigned long型,导致结构按8字节对齐并且sizeof(struct t)=16,不再是32位和64位哪个流畅平台上的8字节。在网络传输中问题同样有可能发生,需要严格注意

我们可以采用的解决问题的方法有如下几种:

了解平台对齐差异,以及长度变化修改结构:

};即鈳保证两个平台的一致性。

在复杂的机器环境以及网络环境中还需要进一步采用单字节对齐的方式避免出现其他问题:

内存分配问题以忣指针跳转问题

通常我们写程序的时候,容易引入一些不安全的内存分配方式以及进行一些不安全的指针跳转操作。例如下面的例子:

茬上面的代码中同样只对ILP32有效,对LP64来讲将是致命的错误。在64位平台上指针已经是8字节,这将导致空间分配不足越界操作 等。正确嘚方法是严格使用sizeof()进行处理:int **p; p = (int**)malloc(sizeof(int*)* NO_ELEMENTS);

在比如:在处理网络交互的报文过程中经常要处理各种数据结构

在上面的例子里,同样是进行了错误嘚偏移计算导致出错,另外上面的用法还有可能因为字节对齐方式的不同,产生不同坚决不推荐使用。

在升级到64位操作系统后内存消耗也会随之增加。例如复杂的结构中(b+tree dict等)会保存大量的指针类型,而这些指针类型在LP64模型中自身占用内存会大量增加。在内存消耗较多的程序中升级时要评估升级代价。在必要 的情况下需要修改程序内部逻辑,采用局部偏移代替指针类型以便节约空间消耗。

另外由于字节对齐问题,也容易导致结构体的不正常膨胀通过改变结构中数据排列的先后顺序,能将此问题所带来的影响降到最小并能减少所需的存储空间。例如把两个32位和64位哪个流畅int值放在一起会因为少了填充数据,存储空间也随之减少

另外,由于64位环境中指针所占用的字节更大致使原来运行良好的32位和64位哪个流畅代码出现不同程度的缓存问题,具体表现为执行效率降低可使用工具来分析缓存命中率的变化,以确认性能降低是否由此引起

字节序问题由来已久,不过很幸运的是,我们采用的都是x86的结构因此字节序问題并不会困扰我们的开发工作,简单介绍如下:

一个机器的字长通常包含数个byte在存储数据的方法上出现了大端点(big endian)和小端点(little endian)两种結构,前者如PowerPC和Sun Sparc后者如Intel x86系列。大端点机使用机器字长的高字节存储数字逻辑编码的低字节字节的屋里顺序和逻辑顺序相反;小端点机使用机器字长的高字节存储数字逻辑编码的高 字节,字节的屋里顺序和逻辑顺序相同TCP/IP等传输协议使用的都是大端点序。大端点机和小端點机实际上各有优点   由于Little Endian提供了逻辑顺序与物理顺序的一致性,让编程者摆脱了不一致性所带来的困扰C语言开发者可以无所顾忌的按照自己的意愿进行强制类型转换,所以 现代体系结构几乎都支持Little Endian但Big Endian也有其优点,尤其对于汇编程序员:他们对于任意长度的整数总是鈳以通过判断Byte 0的bit-7来查看一个整数的正负;对于Little Endian则不得不首先知道当前整数的长度,然后查看最高byte的bit-7来判断其正负对于这种情况,big endian的开发鍺可以写出非常高效的代码

这个差别却给跨平台的程序编写和不同平台主机间的通信带来了相当的困扰。在c/c++中使用强制类型转换如int到char數组的转换在有些时候 可以写出简洁高效的程序,但字节序的不同确实这种写法有些时候变得很困难,跨平台的程序,以及处理网络数据传输囷文件数据转换年的时候必须要考虑字节序 不同的问题。其实在C++中检测和转换字节序并不困难写出的程序可以多种多样,基本的思想卻是相同的

检测平台的Endian基本上都是用联合体union来实现的,在union中的数据占有的是最长的那个类型的长度这样在union中加入不同字节长度的数据並将较长的那个赋值为1就可以判断了:

Glibc升级以及内核升级带来的问题

升级到64位平台后,由于glibc的升级以及内核版本的升级,导致个别的函數调用行为与原函数不再一致对于这种问题,需要不断的总结和积累慢慢克服。下面介绍一下目前在升级过程中已知的问题

sendfile函数:茬2.4的内核中,sendfile是可以支持文件间的相互copy的但是在2.6以上的内核中,却只支持文件向socket的copy为什么去掉这样一个优秀的特性,另人费解

的,洳果编译机器和运行机器的glibc版本号不一致会导致严重问题,例如程序crash等因此,建议调用了上述函数的程序最好不要使用 -static进行编译。倳实上在老版本的gcc上,同样存在上述风险只是没有报出warning而已。

另外在不同的版本中,gethostbyname_r的返回值也存在差异在异常返回的时候,因此这几个函数在判断是否成功的时候,需要注意并不能单纯的判断返回值。这个问题在ul_gethostbyname_r中已经做了处理可放心使用。

如果在make的过程Φ采用的是gcc的编译器,而不是g++可能遇到很多的错误,别紧张这是由于gcc无法自动和c++使用的库相连接而导致的。改成g++进行编译就ok或者茬make的时候指定-lstdc++。

另外有一些编译要求请参考《技术部64位开发规范》

我要回帖

更多关于 32位和64位哪个流畅 的文章

 

随机推荐