簡體   English   中英

64位庫限制為4GB?

[英]64-bit library limited to 4GB?

我正在使用一個圖像處理庫,當我嘗試加載大小為4GB的圖像時拋出異常。 它聲稱是64位,但64位庫不允許加載大於此的圖像嗎? 我認為他們使用64位內存模型/編譯器重新編譯了他們的C庫,但仍使用無符號整數並且升級失敗以使用64位類型。

這是一個合理的結論嗎?

編輯 - 作為一個經過深思熟慮后,操作系統內存會變得如此分散,以至於不再可能分配大塊? (它在重新啟動后也無法正常工作,但只是想知道。)在.NET下呢? .NET托管內存是否會變得如此碎片化以至於大塊的分配失敗了?

這是一個合理的建議,但確切的原因可能是很多事情 - 例如你運行的操作系統,你有多少內存/交換? 應用程序/操作系統可能不會過度提交虛擬內存,因此您需要4GB(或更多)空閑RAM才能打開映像。

出於興趣,它似乎是4GB邊界的明確停止 - 即3.99GB圖像成功,但4GB失敗 - 你說它確實表明在庫數據結構中明確使用32位大小。

更新

關於你的第二個問題 - 不是真的。 幾乎所有現代操作系統都使用虛擬內存,因此每個進程都會獲得自己的連續地址空間。 進程地址空間中的單個連續區域不需要由連續的物理RAM支持,它可以由許多獨立的RAM物理區域組成,看起來像是連續的; 所以操作系統不需要有一個4GB的RAM空閑空間來為你的應用程序提供4GB的塊。

應用程序可能會碎片化它的虛擬地址空間,使得沒有連續4GB區域的空間,但考慮到64位地址空間的大小,它可能在您的場景中不太可能。

是的,除非二進制文件格式本身限制圖像的大小。

為了回答你的跟進,我最近閱讀了這篇文章並發現它很有趣。

是的,.NET可能存在內存碎片問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM