為什麼 Windows 上還沒有普及 64 位的軟體?

現在的電腦絕大多數都是4G以上的內存,預裝的都是64位的系統,(其實題主想表達的是64位系統及64位支持的硬體已經得到普及。)為什麼Windows 中的64位軟體卻沒有得到普及?

例如題主的電腦是DELL的筆記本,預裝的是64位的Windows,但是很多常用軟體(可以說絕大部分),都是32位的版本,例如殺毒軟體、QQ、輸入法、迅雷、音樂軟體等等,甚至一些已經適配的64位的專業軟體(例如Adobe的Au PS等)中也有部分組件(例如Adobe Creative Cloud等)是32位的,相比較於Android ,iOS,特別是iOS 64位都已經全面覆蓋。這是為什麼?是因為開發難度大,還是這類軟體並沒有更高的運算需求?

- - - - - - - - 分割線 - - - - - - - 之前的版本 - - - -

很多年前系統就已經從32位開始向64位過渡,現在絕大多數電腦都是4GB以上的內存,基本都是64位的系統,但是很多的軟體或者說絕大多數的軟體還停留在32位階段,這是為什麼?不是說64位處理器配合64位系統加上64位的應用可以有更高的發揮硬體的水平么?


我們來看看發布64位軟體需要哪些條件:

鑒於大部分Windows應用還是用C++開發為主,尤其是GUI客戶端,所以我們只談談C++。

1. 平台支持64位,Windows本身一直有64位版本,但是用戶安裝的普及率就呵呵了

2. 編譯器支持64位,VC6不行,新版本肯定沒問題

3. Framework支持64位,主流基本OK,但是眾多第三方開源庫就不保證了

4. 調試測試工具支持64位,性能測試,內存泄漏檢測,自動化測試工具,崩潰分析,靜態代碼分析等等,這個涉及的東西太多,不保證都有64位支持

5. 第三方輔助外掛插件等,這些東西也是生態環境的一部分,沒有也不行,它們的開發者大多數小公司或個人,未必有能力或意願發布支持64位的版本

6. 程序員的能力,開發64位同時還要保證32位也是可用的,一份代碼同時兼容32/64對程序員技能是有較高要求的。

再看看帶來的好處:

1. 能用更大的內存,大約大於1.6GB,不過普通程序哪需要這麼多,如果真的有這麼多,十有八九是出bug了,內存泄漏。

2. 會有更好的性能,大約能提升10 - 20%左右,但是如果程序中依賴彙編性能優化,還需要開發64位彙編,否則性能可能會比32位還差。

總的來說,開發64位應用的外部條件成熟度只有一半多一點,開發過程中多少都會遇到一些64位特有的麻煩。所以絕大多數開發商對於發布64位版本都是沒什麼動力的。

64位普及度最高的平台是 iOS,從iPhone5s開始CPU都是64位的了,xcode編譯同時生成32/64兩份代碼,無需工程師干預,AppStore強制要求支持64位,否則不讓上架。所以整個iOS生態系統很快就切換到了64位,甚至有的應用已經不再發布32位版本了。iOS是個新系統,沒有太多歷史包袱,大部分應用代碼規模非常小(相對於windows應用來說),容易移植。Apple只做個人消費市場,沒有企業級客戶,所以可以半強制用戶升級軟硬體,32位很快就被淘汰了。


因為大部分軟體用不上那麼大內存。而需要那麼大內存的軟體,已經都是64的了。


64位軟體的確有計算優勢啊~

所以WinRAR有64位版本啊~

所以Adobe的Photoshop、Premier、After Effect有64位版啊~

瀏覽器神馬的,因為要支持64位插件,所以要有64位版啊~

但是日常用的軟體,很少有那麼高的運算需求,沒必要出64位版啊~


1、因為很多人並沒有用過面向64位的開發工具。嗯,都2016年了已經,某++已經18歲了還有人在用。

2、因為有很多32位年代留下來的遺留代碼。當年16位和32位也並存了一段時間,可是16位遺留下來的東西太少了,32位年代真是一個百花齊放的年代。

3、因為常見開發工具的默認目標都是32位的。懶得改目標平台的人肯定有啊。

4、因為沒有16位到32位年代那麼迫切的內存壓力。一個64位系統下並存多個32位軟體還是能充分利用內存資源的。

實際上,把軟體從32位改為64位所需的工作量只有點兩下滑鼠那麼輕鬆,然而前提是你的代碼正確(不能有任何地方只能在int*為32位下正確)

P.S. 能正常工作的錯誤代碼實在是太TM常見了啊哈哈哈哈,不對約定外進行任何假定的代碼才是好代碼


因為一票人馬還在用嘆號強推崇的VC6。


  • 很多人寫的 C++ 程序都會假定指針是 32 位
  • 對於有 native 插件功能的程序,改變 arch 後所有插件都需要跟著動
  • x64 OS 對於安全要求更高,當然這個一般隻影響驅動……


強答,都是站在軟體開發這的個人體會。

我主要的軟體都支持x64了。原來的代碼很規範,直接編譯,沒有任何改動。安裝程序也可以根據系統是否是x64的選擇最佳版本(32或64)。對於用戶根本覺察不到。我覺得微軟VS兼容性還行,整個移植過程沒有太多波動。

大公司商業軟體不用擔心,賺錢的早就有64位版本了。我電腦上用的大多數都是64位的。

但是一些原來流行的Win32應用,特別是海量小工具,共享軟體,免費軟體之類,如果原來的項目代碼有不規範的地方,譬如指針用32位傳遞之類,那麼兼容性就很麻煩了,不僅要改,而且測試也是問題。所以估計大量小軟體的作者下不了狠心跨過這一步,再加上現在這些老工具都不太掙錢,或者大多免費,所以移植成本不得不考慮。

我自己有幾款不賺錢的,根本沒心思去弄64位。所以我覺得題主可能平時主要用的是這樣一些免費工具,小軟體什麼的,所以才有這樣的錯覺。


兼容性

避免折騰

另外

win10 還不是繼續有32位的


跑個題。。。

以前我自己寫了個壓縮演算法,32位下寫的,能用,64位編譯完運行會報錯。。。。

後來我改進的時候直接重構了。一開始就在64位下寫,64位下測試。

一切正常,結果切回32位時又報錯了。。。。

好吧我其實不是來說32和64位之間難以代碼兼容的。

因為我後來發現我用了avx,sse指令集,在64位下,堆上分配內存還能滿足內存對齊的要求,32位下就不能了,於是崩了。。。

我只是想說明偶爾還是會有坑出現。不過知道了問題所在後,換用align的malloc以及寫了自己的stl分配器就解決了。


第一,因為還有很多人在使用XP。

第二,32位程序能運行在64位Windows上,反之不可以。

綜上所說,為了兼容性,很多程序如果寫了64位的執行文件,一般也會同時寫一個32位的,反之不然。

第三,64位程序占更多內存,.net 程序尤其是(每個對象都多佔用幾個位元組),要忽略內存佔有量,現在的內存大小還不夠。

第四,以前64位的.net程序運行效率很低,導致很多人並不喜歡讓程序在64位下運行(現在已經解決)。

結論:淘汰32位還需要很長時間。


沒那麼高的性能要求的話以前的32位版可以直接用,兼容性更好

哪怕是Office,微軟自己都是默認推薦安裝32位的


總結:64的優點只適合少部分程序,並且很多方面不如32位


沒有必要。有必要的軟體大都有64位的版本,沒有必要的軟體何必費力去做64位的版本?做出來了,也未必有人用。


反正我是很討厭C盤裡面的 Program Files(×86) 文件夾


如果我寫的程序採用64位編譯並不能獲得更好的性能,那又何必使用64位編譯而拋棄那些32位操作系統的用戶呢?

其實很多小軟體,支持64位只需在編譯時換個編譯器,或者修改下編譯參數而已,源碼完全無需修改,內存定址什麼的,現在的編譯器都幫你做好了。然而這些小軟體幾乎全部不需要64位的大內存支持...


作為一名程序員,平常難免接觸到一些比較主流的技術,就像現在周圍的同學同事,很多都用上了win10。而我還在用win7,感覺有些落伍了。

然而那天回家,我得知我姐的電腦還是用著xp,想幫我姐升級,她卻還說不用。連問之下,才發現她公司辦公用得電腦,還是xp。

真是慚愧!!!

為什麼64位還沒有普及?

我倒覺得是用戶群跟不上來。32位的機子現在用得人還很多,有用戶就有市場。

一個公司,如果完全只做64位的軟體,就意味著放棄32位的用戶。

這必然會出現一個需求,這個需求將會導致新軟體的出現,最後於原先的老好公司競爭。所以還是得做32位的軟體。


很多32位的應用是歷史遺留問題,改這些東西是耗費人力物力的。

只要夠用,沒事改他幹嘛。


因為要兼容XP


windows的兼容性太好了,好到一些軟體舊的x86版本穩定性甚至強過新開發的x64。既然這樣,何必費那麼大力氣開發64位版本呢?


這取決於大多數用戶所使用的電腦是32位還是64位的。。。


推薦閱讀:

Linux作為日常操作系統是否比Windows穩定?
為什麼微軟的軟體安裝都如此麻煩?
為何 Windows 系統用久會變慢,而 Linux 不會?
在Android系統下有沒有可能開發出類似Windows里「驅動精靈」這樣的應用程序?
Windows滑鼠屬性里「提高指針精確度」的功能是怎麼工作的?

TAG:軟體 | MicrosoftWindows | 計算機 |