V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
initialdp
V2EX  ›  Linux

大家还会考虑 32 位系统吗?

  •  
  •   initialdp · 2014-12-16 09:09:44 +08:00 · 10057 次点击
    这是一个创建于 3667 天前的主题,其中的信息可能已经有所发展或是发生改变。
    貌似现在大部分都已经是64位系统,CentOS7都不再发布32位版本。这种情况下,大家安装新系统或者发布新软件时,是否只用考虑64位?我个人感觉只有一些遗留系统还是32位的。
    59 条回复    2014-12-17 09:22:40 +08:00
    CupTools
        1
    CupTools  
       2014-12-16 09:14:58 +08:00
    OpenStack Juno版支持CentOS 7,然而CentOS 7只有64版本。將來還有更多系統和軟件只支持64位
    halczy
        2
    halczy  
       2014-12-16 09:15:12 +08:00 via iPhone
    为什么还要装32位?
    toduse
        3
    toduse  
       2014-12-16 09:17:31 +08:00 via Android
    以前是硬件淘汰系统,现在是游戏淘汰系统,例如看门狗等游戏只支持64位,但是我觉得32位还会使用相当长的时间,有些行业软件没有支持64位,就像银行的ATM大多还是XP
    wy315700
        4
    wy315700  
       2014-12-16 09:18:27 +08:00
    虚拟机里 少于4G内存还是会考虑32位

    尤其是512内存之类的,跑64位简直是受虐
    imn1
        5
    imn1  
       2014-12-16 09:24:23 +08:00
    虚拟机、下载机或者出于需要低耗考虑的情况,依然32位是首选
    ZMOM1031
        6
    ZMOM1031  
       2014-12-16 09:26:55 +08:00
    Mac
        7
    Mac  
       2014-12-16 09:29:51 +08:00
    上游企业有个万年不更新的JAVA客户端,只能在32位系统的SSL VPN下工作,64位操作系统无法连接VPN。
    missdeer
        8
    missdeer  
       2014-12-16 09:51:49 +08:00
    我有个近10年的T43,32位的,前两天想装个PCBSD上去,一看人家已经只出64位版本了,得,继续用FreeBSD,顺便骂娘。
    ryd994
        9
    ryd994  
       2014-12-16 09:56:39 +08:00 via Android
    @toduse 此xp和不是彼xp吧……
    ATM用的不是XP embedded么,XP embedded还没停止服务的,嵌入式没法更新的啦
    abscon
        10
    abscon  
       2014-12-16 10:10:43 +08:00
    @missdeer PCBSD不是省油的灯,不是想在x86上用ZFS,或者内存不多的话,不需要考虑这货。
    hjc4869
        11
    hjc4869  
       2014-12-16 10:20:06 +08:00 via iPhone
    @toduse 看门狗要求6G RAM,32位桌面端Windows又没有官方PAE支持,铁定是玩不了啦。。
    BF的PC版,32位不能调特效。RAM局限是一个很大的问题。
    kernel1983
        12
    kernel1983  
       2014-12-16 10:38:26 +08:00
    在虚拟机里面安装系统的时候,都是考虑32位系统的
    comic
        13
    comic  
       2014-12-16 12:13:53 +08:00 via Android
    @toduse 工行的老机器都升级WIN7了
    gnup
        14
    gnup  
       2014-12-16 12:25:13 +08:00
    64位系统内存开销要1.5倍与32位系统,4G内存用64位系统就是找虐。
    你可以自己测试下,重点是先关闭虚拟内存。然后用64位玩魔兽世界,切换出来开2个WOWDB的查询页面,内存用尽溢出就崩溃了。32位的系统占用才2G左右
    initialdp
        15
    initialdp  
    OP
       2014-12-16 13:06:00 +08:00
    @gnup 对linux系统而言,内存占用没有1.5倍这么大。试过32位Debian的VPS和64位的VPS,内存相差不大,当然64位的系统稍微要多一些。我觉得512M以上内存的VPS,64位和32位的内存差异基本不太需要考虑。
    jjx
        16
    jjx  
       2014-12-16 13:17:49 +08:00
    2g vps上现在有意识的用32位的
    efi
        17
    efi  
       2014-12-16 13:23:26 +08:00
    ARM?
    gnup
        18
    gnup  
       2014-12-16 13:32:58 +08:00
    @initialdp 内存占用单字节变双字节,双字节变四字节,以此类推,内存占用必然增多。就是达不到一倍,也少不哪去。
    64位系统不是速度快了,而是扩大了基本单元以达到大内存使用的目的。
    如果4G以内的内存,32位系统才是最理想的选择。
    那些4G的win7x64都怎么想的?
    proudzhu
        19
    proudzhu  
       2014-12-16 14:10:22 +08:00   ❤️ 1
    @gnup 会快,寄存器多了。
    4G 装 x86-64 时一般使用绝对足够,到时内存不够时再加个内存就行了。
    装 x86 位系统,到时候需要 x86-64 时再重装系统?
    而且 x86 windows 最多才能 3.2G 内存。。。
    em70
        20
    em70  
       2014-12-16 14:11:10 +08:00 via Android
    树莓派还得32位系统
    msg7086
        21
    msg7086  
       2014-12-16 14:29:05 +08:00
    @gnup 单字节变双字节是什么鬼?只有指针会从32位变成64位,数据又不会变。
    而且64位系统是寻址空间变大了,怎么会是扩大基本单元?你以为是4K硬盘搞基格式化啊……
    andybest
        22
    andybest  
       2014-12-16 14:30:17 +08:00
    128M 内存的 VPS 应该装 64 位系统吗
    wy315700
        23
    wy315700  
       2014-12-16 14:33:25 +08:00
    @msg7086 Linux下long在64位系统是64位的

    Windows下Long不管在哪都是32位的
    viator42
        24
    viator42  
       2014-12-16 14:39:45 +08:00
    现在手里已经找不到32位的安装盘了
    x86
        25
    x86  
       2014-12-16 14:40:28 +08:00
    虚拟机
    usedname
        26
    usedname  
       2014-12-16 14:55:45 +08:00
    不做开发的话,4G内存win7 x64其实还是够用的,不过win7 x86 + 600M ramdisk 也是爽的飞起,不过内存这种东西越大越爽,谁用谁知道,反正我是不会下载32位的镜像了。。。

    chrome一定跟内存厂商有勾结
    typcn
        27
    typcn  
       2014-12-16 15:06:00 +08:00
    @wy315700 你编译的是32位程序吧
    Cu635
        28
    Cu635  
       2014-12-16 15:10:52 +08:00
    lz,操作系统有好多情境了,大的就有桌面、服务器、嵌入式三种情境啊。

    桌面领域又可以分个人桌面和公司给配的生产环境了吧,个人桌面是自己能够控制的,这才有“考虑”这一说啊。公司给配的自己是没法控制的,我想用64位公司还可能不给呢。

    而现在玩树莓派、openwrt的人越来越多,嵌入式也不能忽略了啊。嵌入式基本是有啥用啥吧,而且嵌入式设备的性能能不能跑64位系统也是个事儿。也没法“考虑”啊。

    服务器也有性能问题,自己一个vps好歹自己能控制,不过要是384M内存跑64位的话是找虐。而有些重要服务器哪怕自己是运维,要考虑的也是很多的。
    wy315700
        29
    wy315700  
       2014-12-16 15:12:25 +08:00
    @typcn

    Windows下的64位程序 Long就是32位的
    gnup
        30
    gnup  
       2014-12-16 15:17:29 +08:00
    @msg7086 没玩过魔兽世界吧?你用win7 32,win7 64试试。看内存是不是一倍的关系!
    gnup
        31
    gnup  
       2014-12-16 15:18:22 +08:00
    应为魔兽世界占内存大,所以用魔兽世界一下子就测试出来了
    msg7086
        32
    msg7086  
       2014-12-16 17:00:12 +08:00
    @gnup 首先吧,山口山本来就没有可比性。
    山口山内部各种插件系统,lua虚拟机什么的各种,3D渲染什么的各种,而且内部的内存管理也是黑箱。
    万一人家只是因为64位所以就多吃掉点内存来提升运行性能呢?
    而且现在战网启动山口山默认就是64位了,你觉得暴雨是吃饱了撑的在同等条件下要多吃你点内存玩么。
    常用软件不至于会产生那么大的内存占用差别。

    @wy315700 这个long的大小是跟着系统/编译器走的。int一般是32位,long long一般是64位,而long可以任取32或者64。一般的程序不应该直接用long,否则会出现32位/64位运行结果不一致的问题。
    就PHP这个内置long的问题已经造成32位和64位运行环境下整数溢出上限不一致了。
    gnup
        33
    gnup  
       2014-12-16 17:14:46 +08:00
    @msg7086 什么算常用软件?浏览器算吗?你用浏览器测试下在跟我说你的猜测
    msg7086
        34
    msg7086  
       2014-12-16 17:33:08 +08:00
    @gnup 32位系统已经不用起码5年了,没条件测试,还是不和你争了,我们就当单字节会变成双字节好了,大家happy就行。
    gnup
        35
    gnup  
       2014-12-16 18:01:23 +08:00
    64bit计算主要有两大好处:可以进行更大范围的整数运算;可以支持更大的内存。
    不能因为数字上的变化,而简单的认为64bit处理器的性能是 32bit处理器性能的两倍。实际上在32bit应用下,32bit处理器的性能甚至会更强,即使是64bit处理器,目前情况下也是在32bit应用下性能更强。所以要认清64bit处理器的优点,但不可迷信64bit。
    ----------------百度百科

    简单来说、64位和32位、他们处理整数数据单元的大小 一个是64位(8字节) 一个是32位。
    64位系统占用的内存地址也是64位、因而比32位要耗内存。
    librehat
        36
    librehat  
       2014-12-16 18:35:19 +08:00   ❤️ 1
    @msg7086 人家把百度百科都当权威拿出来了,我们就不要理他就好了。
    gnup
        37
    gnup  
       2014-12-16 18:41:44 +08:00
    @librehat 你知道啥!
    gnup
        38
    gnup  
       2014-12-16 18:43:09 +08:00
    @librehat 是百度百科说错了。还是你啥也不懂呢?
    initialdp
        39
    initialdp  
    OP
       2014-12-16 18:44:56 +08:00
    @gnup 可以支持更大的内存、更快速的寻址,不等于程序就会占用更多的内存。

    比如说,一个服务器程序大约4M大小,开辟了250M的内存作为内部应用。迁移到64位系统,程序大小可能增长为8M大小(当然,这只是个比喻),但是仍然可能只需要开辟250M内存供内部使用。因此,(8M-4M)的变化对于该程序的总内存占用来说,算不了多少。

    其实@msg7086 说的没错。魔兽世界等程序在64位系统占用更多内存,与系统本身关系不大,一定是该程序用空间换效率等其他方面的考虑。
    gnup
        40
    gnup  
       2014-12-16 19:00:51 +08:00
    @initialdp
    有条件你关闭虚拟内存,用 Chrome Firefox 在 win32 win64 跑跑。你就不会说没差距了。试了才好说话。
    到了8G 16G+内存成为最低标准,普及的时候,那个时候才能考虑,
    现在一大堆4G内存的电脑跑win 64 ,还总吵吵硬盘太慢,那是因为内存不够,虚拟内存用的太多导致的
    librehat
        41
    librehat  
       2014-12-16 19:01:59 +08:00
    @initialdp @gnup 占用更大的内存是没错的,这就是一个trade-off,32位系统是根本用不到4G内存的,没有PAE的情况下只有3G多一点,现在旗舰手机都超2G的时代,3~4G内存的电脑估计过不了一两年就会淘汰掉了。

    其实这也是看用途吧,没有必要一窝蜂全部上64位,计算密集型的肯定要上64位,而低功耗、移动设备上64位意义不是很大。至于游戏?我呵呵,代表游戏产业的不是只有PC好吗,自己去看Xbox One还有PS4……游戏主机才代表游戏的未来,有的主机上一代就开始用64位了。64位除了更大的内存,还有更多的指令集,以及更大的register地址。
    gnup
        42
    gnup  
       2014-12-16 19:13:22 +08:00
    @librehat

    64位的优点谁都知道,64位也是未来。

    看清我说的重点 4G以内的内存是32位还是64 位!
    msg7086
        43
    msg7086  
       2014-12-16 20:55:21 +08:00
    @gnup

    #18楼 QUOTE { 内存占用单字节变双字节,双字节变四字节,以此类推,内存占用必然增多。 }

    #21楼 REPLY { 单字节变双字节是什么鬼?只有指针会从32位变成64位,数据又不会变。 }

    #35楼 QUOTE { 简单来说、64位和32位、他们处理整数数据单元的大小 一个是64位(8字节) 一个是32位。64位系统占用的内存地址也是64位、因而比32位要耗内存。 }

    我就引用上面的对话,你自己看你说的是什么,我说的是什么。
    你觉得32位下占用1KB的char[1024]到了64位下会占用2KB么……

    另外64位系统下32位程序性能比64位好我也是醉了。32位应用程序白白比64位程序少用了一堆寄存器,竟然还能运行得更快,有此黑科技请务必告诉我这是怎么做到的。

    度娘百科还是不要引用的比较好,否则会引起很多笑话的。
    gnup
        44
    gnup  
       2014-12-16 21:13:39 +08:00
    @msg7086
    你说你弱智不,还当自己会点啥!
    你都指定char[1024]了,他必然是1024.能不能在弱点!!!

    是32位CPU,跟64位CPU比较.麻烦你看字能不能仔细点

    度娘的东西怎么也不你说的靠谱
    msg7086
        45
    msg7086  
       2014-12-16 21:35:47 +08:00
    @gnup 顿时开始同情起你的逻辑能力了。

    先是自己说单字节变双字节,双字节变四字节,以此类推,我举个单字节的char又说不会变,打自己脸也不能这样打啊,看着都没意思。

    引用你#35楼 「即使是64bit处理器,目前情况下也是在32bit应用下性能更强。」

    能不能麻烦你自己发的东西自己看仔细点?

    要是你真的觉得度娘能比我靠谱,那我们还是不要聊下去了,位面不同没法谈。
    至于骂人弱智嘛,我也不是不能理解。总有人觉得别人都是弱智就自己智商特别高,特别优越。
    gnup
        46
    gnup  
       2014-12-16 21:35:51 +08:00
    一帮XX.都以为自己会点啥,轮番车轮战.

    都跟你说了,你用32 跟 64的系统测试下,对比下,看看是不是64的占用内存非常大.
    都在闭着眼睛说话.

    多做几次测试看看,内存占用那么大,你行你就给我解释解释.
    都办瓶子水,还真以为自己懂呢
    cchange
        47
    cchange  
       2014-12-16 21:37:45 +08:00
    有些行业 像我们的工控行业用旧系统很正常,有些软件有十年以上的历史。 现在工业现场用VB6 VC6比比皆是……
    initialdp
        48
    initialdp  
    OP
       2014-12-16 21:44:11 +08:00
    @cchange 是的。遗留系统、嵌入式系统,当然不得不保留对32位、甚至16位系统的支持。

    对于新的服务器端程序(基于x86-64),尤其是基于通用linux系统(例如CentOS、ubuntu等)的程序,我觉得可以考虑放弃32位版本了,同时维护两个版本的话对小公司而言成本有点高。
    gnup
        49
    gnup  
       2014-12-16 21:54:01 +08:00
    @msg7086
    你接话能力可挺强啊
    好,这个帖子,我不回复任何人了,就单独跟你聊下去

    你先测试下.64位与32位比,双倍的内存占用,你解释下.
    gnup
        50
    gnup  
       2014-12-16 22:07:34 +08:00
    @msg7086

    也不用那么多废话了.
    整理了下你的思路,你的意思 "指针会从32位变成64位" 而数据内存占用不会变

    我知道你根本可能都没测试过,就来讲一些不靠谱的理论.

    你就说这多出近一倍的内存占用是谁占用?去哪了?为什么内存开销这么大?也总得有个用途吧?
    别平白无故的被64位用的内存,被你一说好像没用是的.

    你连测试都懒得测试,你能讲出什么理论啊
    msg7086
        51
    msg7086  
       2014-12-16 22:24:20 +08:00   ❤️ 2
    @gnup 大清早的不想聊太多这种事情,累。

    还是那句话,64位和32位比,不是比个浏览器比个魔兽就能解决问题的。
    每个应用的情况都不一样。

    比如32位程序因为有内存寻址模型影响,所以有2G的上限。
    就算打开LAA大内存寻址,最大寻址空间也不能超过3G,因为3G以外的区域是内核保留的。
    对于仅仅只有2G大小的内存空间来说,像山口山这样的程序就必须严格限制自己的内存消耗。
    明明读取了一张图片或者一个材质,却因为顾及内存大小而不得不在稍后就清理掉以释放内存。

    而对于64位的程序来说,内存空间可以用起来更轻松。
    稍后还会用到的图片或者资源,就先在内存里放一下,反正就算整体内存占用超过2G也不会出问题。
    这样虽然内存占用更大了,但是运行起来更流畅,延迟是更小。

    山口山这种即时游戏,当然是运行效能越高越好。
    浏览器里大量的图片、图层、javascript代码、flash广告,当然也是效能越高越好。
    为了效能,多使用一些内存,就和ramdisk一样。要是这样就指责说占用内存过多,实在是冤枉了。
    因此说64位的软件可以运行得更快,不只是纸上谈兵,是有实际依据的。

    另外64位下可用的寄存器也更多。32位程序做64位计算的时候,必须要用到SSE指令集才能快速计算,否则就只能用32位计算来模拟,效率非常差。64位指令集加入了RAX等扩展寄存器,直接在寄存器上就可以做64位运算,节约了拷贝到SSE寄存器的时间,或是用32位计算来模拟的时间。

    而且64位程序在编译的时候可以更好地利用编译器特性进行优化。例如现在很多Linux发行版里的32位程序都是基于i386编译,因为32位从20多年前的386就出现了。而64bit则可以直接对应现代处理器,例如P4或者速龙之后的版本,因此可以直接假定处理器会带有SSE指令集,也因此所有的可以并行的操作,都会去用SSE指令集来优化。例如memcpy,32位下为了兼容性可能只能逐字节复制,最多用MMX来优化(但是会和浮点数运算冲突),而64位下可以直接做MEM->XMMREG->MEM的批量复制,速度快得多。

    对比以下代码
    32位,i386兼容:
    MOV EAX, [p]
    MOV [q], EAX
    一次复制4字节

    64位,使用SSE:
    MOVNTDQA XMM0, [p]
    MOVNTDQA [q], XMM0
    一次复制16字节

    后者的性能至少是前者的2倍或者更多。

    所以在同一个基准线上,64位的程序会运行得更快。
    gnup
        52
    gnup  
       2014-12-16 22:56:59 +08:00
    @msg7086

    你的意思是64位内存占用大不是白用的,是被缓存了.开发人员用起来也会比较轻松.不用考虑太多内存占用的问题.你是想说类似MongoDB这种内存数据库吧,但是内存也得够大啊.

    你举的64位的例子得在大量运算的情况下才明显,运算量小差别不明显.这是64位的优点.
    而内存的开销相对与32位系统要大很多.

    而对于4G的内存的64位系统,装上了你这样肆无忌惮的使用内存的程序.而不考虑内存情况,那结果就是内存不够用.或使用虚拟内存,或程序崩溃.

    4G的内存32位的系统可以使用的非常舒服,而换成64位后,马上感觉内存不够了就必须升级内存.
    这时32位系统的优势就明显了.吃内存少.这也是我想说的,4G以下的内存32位的系统
    msg7086
        53
    msg7086  
       2014-12-16 23:19:36 +08:00   ❤️ 1
    @gnup MongoDB只是其中一个特例。
    我上面也说了,具体的情况需要具体分析,每个应用的情况都不一样。
    有些软件对速度要求高,所以他们更吃内存一些。
    你不能在享受到速度快的同时又去指责内存消耗大。
    对于只有4G内存的系统来说,挑选合适的软件才是更重要的。
    玩游戏的话本来就应该配置更多的内存以优化性能。
    玩山口山天天H RAID或者5H的你只配个4G内存是几个意思。
    应用程序,比如像Chrome这样的浏览器,以多进程高性能为卖点,本来就是吃内存吃得多。
    如果要省着内存用,Opera显然是更合适的,省着点用2G内存都能跑得欢。
    弹性内存占用,大内存吃得多,小内存吃得少,速度和资源占用兼顾。

    至于4G内存。说起来我用4G已经是很久很久以前的事情了。
    记得最起码4年前就已经在用8G了,3年前就在用16G了。

    另外我从第一个回帖就已经说了,我针对的论点是你说的一变二的占用。
    我不否认4G内存用32位更好,但是我不能接受你说的64位下占用率直接变2倍这种没有科学依据的说法。
    只看表面现象不讨论本质,实在谈不上是科学依据。

    这就天亮了,我也不多说了,睡觉去了。
    ryd994
        54
    ryd994  
       2014-12-17 02:54:49 +08:00 via Android
    看楼上论战我也是醉了,32位消耗略小这是有的
    so what?
    于是就该大多数人迁就少数老爷机?而且即使是4g以下,性能就真的差那么远么?能用老爷机的人,都是只上上网看看电影的人,谈什么性能?要用老爷机来玩游戏的人,只有一个原因,没钱。
    以少数人的少量性能损失为代价,减轻了维护成本,加快了开发,事实上对所有人包括老爷机用户都是有利的
    希望各位的讨论围绕主题,不要歪到单纯的性能比较上去,否则我还可以说单片机上8位最好
    esile
        55
    esile  
       2014-12-17 03:05:58 +08:00
    小vps继续32位
    initialdp
        56
    initialdp  
    OP
       2014-12-17 08:26:50 +08:00
    @esile 这得看小到什么程度啊。我觉得内存低于512M,可以使用32位,超过512M的都可以直接上64。

    以我们生产环境的服务器(Debian系统)为例,32位系统时内存占用190M,CPU平均为5.1%,升级为64位系统后内存占用大约是200M, CPU平均为5%。内存占用略有提升,效率略有提高。

    因此我觉得以目前的市场环境,内存不是制约因素,更好的扩展性、更强大的底层支持,都值得将系统升级到64位。另外非常重要的是,统一到64位,开发者的维护成本也要少一些。
    wy315700
        57
    wy315700  
       2014-12-17 09:03:20 +08:00
    @initialdp

    虚拟机里 64位系统的进程切换更慢了

    用sysbench测试的结果,
    32位系统进程切换效率是64位的2倍

    因为寄存器更多,需要更多的资源去调度
    choury
        58
    choury  
       2014-12-17 09:08:08 +08:00
    @gnup 如果你看了32位和64位的代码调用传参的规定就不会这么认为了

    以下内容来自https://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A

    在32位下面,所有参数都是压栈传递(除了fastcall,因为这个调用方式没有标准)

    而在64位系统下面,微软x64调用约定使用RCX, RDX, R8, R9这四个寄存器传递头四个整型或指针变量(从左到右),使用XMM0, XMM1, XMM2, XMM3来传递浮点变量。

    头六个整型参数放在寄存器RDI, RSI, RDX, RCX, R8和R9上,同时XMM0到XMM7用来放置浮点参数。

    所以说除非你的程序不进行任何其他的函数调用,否则对性能上肯定是有提升的,不要相信百度百科的鬼话。
    Ixizi
        59
    Ixizi  
       2014-12-17 09:22:40 +08:00
    32位用 的只会越来越少
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1002 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:45 · PVG 05:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.