為什麼 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 | 計算機 |