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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

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

3 回答

?
翻翻過去那場雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

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

那么,有沒有辦法解決這個(gè)問題呢?

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

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


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


那么,為什么這可以在您的Linux機(jī)箱上運(yùn)行?

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


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


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

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

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

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

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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