第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

64位窗口上的Python 32位內(nèi)存限制

64位窗口上的Python 32位內(nèi)存限制

我遇到了一個我似乎無法理解的記憶問題。我在Windows 7 64位機器上運行8GB內(nèi)存并運行32位python程序。這些程序讀取了5,118個壓縮的numpy文件(npz)。Windows報告磁盤上的文件占用1.98 GB每個npz文件包含兩個數(shù)據(jù):'arr_0'的類型為np.float32,'arr_1'的類型為np.uint8python腳本讀取每個文件將其數(shù)據(jù)附加到兩個列表中,然后關(guān)閉該文件。在文件4284/5118周圍,程序拋出一個MemoryException但是,任務(wù)管理器說發(fā)生錯誤時python.exe * 32的內(nèi)存使用量是1,854,848K~ = 1.8GB。遠低于我的8 GB限制,或者假定的32位程序的4GB限制。在程序中我捕獲內(nèi)存錯誤并報告:每個列表的長度為4285.第一個列表包含總共1,928,588,480個float32的?= 229.9 MB的數(shù)據(jù)。第二個列表包含12,342,966,272 uint8的?= 1,471.3MB數(shù)據(jù)。所以,一切似乎都在檢查。除了我得到內(nèi)存錯誤的部分。我絕對有更多的內(nèi)存,它崩潰的文件大約是800KB,所以它不會在讀取一個巨大的文件時失敗。此外,該文件未損壞。如果我事先沒有耗盡所有的記憶,我可以讀得很好。為了讓事情變得更加混亂,所有這一切似乎在我的Linux機器上運行良好(雖然它確實有16GB的內(nèi)存,而不是我的Windows機器上的8GB),但是,它似乎并不是機器的RAM。造成這個問題。為什么Python會拋出內(nèi)存錯誤,當(dāng)我預(yù)計它應(yīng)該能夠分配另外2GB的數(shù)據(jù)?
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

我不知道為什么你認為你的進程應(yīng)該能夠訪問4GB。根據(jù)MSDN上Windows版本的內(nèi)存限制,在64位Windows 7上,默認的32位進程獲得2GB。*這正是它用完的地方。

那么,有沒有辦法解決這個問題呢?

好吧,你可以自定義構(gòu)建32位Python,它使用IMAGE_FILE_LARGE_ADDRESS_AWARE標(biāo)志,重建numpy和所有其他擴展模塊。我不能保證使用大地址識別標(biāo)志運行所有相關(guān)代碼都是安全的; 這是一個很好的機會,但除非有人已經(jīng)完成并進行了測試,“一個好機會”是任何人都可能知道的最好的機會。

或者,更明顯的是,只需使用64位Python。


物理RAM的數(shù)量完全無關(guān)緊要。你好像認為你有8GB內(nèi)存的“8GB限制”,但這不是它的工作原理。你的系統(tǒng)占用你所有的RAM 以及它需要的任何交換空間,并在應(yīng)用程序之間進行劃分; 一個應(yīng)用程序可以獲得20GB的虛擬內(nèi)存,即使在8GB的機器上也不會出現(xiàn)內(nèi)存錯誤。同時,一個32位的應(yīng)用程序無法訪問超過4GB的空間,并且操作系統(tǒng)會占用一些地址空間(默認情況下是Windows的一半),因此即使在8GB機器上也只能獲得2GB那沒有運行任何其他東西。(并不是說在現(xiàn)代操作系統(tǒng)上可能“沒有運行任何其他東西”,但你知道我的意思。)


那么,為什么這可以在您的Linux機箱上運行?

因為你的linux盒子被配置為32位進程提供3.5GB的虛擬地址空間,或者3.99GB,或者......好吧,我不能告訴你確切的數(shù)字,但是我已經(jīng)看到多年的每個發(fā)行版都已配置好了至少3.25GB。


*另請注意,您甚至沒有真正獲得2GB的數(shù)據(jù); 你的計劃。操作系統(tǒng)及其驅(qū)動程序可以訪問代碼的大部分內(nèi)容位于另一半,但有些位于您的一半,以及您加載的每個DLL以及它們需要的任何空間以及其他各種內(nèi)容。它并沒有太多,但它不是零。


查看完整回答
反對 回復(fù) 2019-09-03
?
MM們

TA貢獻1886條經(jīng)驗 獲得超2個贊

你實際上沒有必要在windows上編譯exe,這IMAGE_FILE_LARGE_ADDRESS_AWARE只是圖像標(biāo)題中的一個標(biāo)志(并不是說這將得到官方支持,但是我們沒有評判;))。dll在這件事上也沒有發(fā)言權(quán),所以不管怎么說都不需要改變。

查看完整回答
反對 回復(fù) 2019-09-03
?
Helenr

TA貢獻1780條經(jīng)驗 獲得超4個贊

我完全不知道Python或者OP所依賴的任何Python模塊是否做了這樣的事情。我認為不太可能,但我無法保證。顯然有一些原因它不是IMAGE_FILE_LARGE_ADDRESS_AWARE開箱即用的; 我的猜測是,到目前為止,沒有一個開發(fā)人員發(fā)現(xiàn)它值得測試和/或擦除源代碼,因為如果他們真的需要超過2GB,他們只需要使用64位版本。但這只是一個猜測,這就是為什么我的回答說它很有可能會起作用,但我不能保證。

查看完整回答
反對 回復(fù) 2019-09-03
  • 3 回答
  • 0 關(guān)注
  • 1616 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號