opencv 32位申請內存不足突破2G方法

首先給出我的配置吧,win10 64位 + vs2015 + opencv2.4.9,這個問題的產生只與系統有關,

1.X86程序與X64程序的區別
X86程序的內存使用限制
在Windows32位操作系統中,每個進程所能使用的最大空間(包含操作系統使用的內核模式地址空間)爲4G,在通常情況下,操作系統會分配2GB內存給進程使用,另外2G內存,另外2G內存爲操作系統保留。
何謂大內存
所謂“大內存”,就是指允許X86進程允許使用超過2G的內存空間。這裏的內存空間不光是進程動態申請的,還包括操作系統自動爲進程分配的。一般情況下,進程當前使用的內存空間大小,可以通過操作系統計數器來查看。
從目前的個人的測試情況來看,開啓大內存後的X86進程最多能用3.7G左右的內存空間,當然該數值是個估計值,和硬件、操作系統及程序本身都有關係。
大內存的使用條件
1.操作系統應該是64位Windows操作系統;
2.開啓大內存的程序應爲Visual Studio開發的;
3.程序應爲X86程序,X64程序本身就沒有2G內存的限制。
2.什麼時候需要開啓大內存
大內存的適用情況
在軟件開發中,隨着處理路數和數據量的加大,內存消耗的越來越多。爲了解決這種問題,最好的方法是將編譯平臺從X86切換到X64。然後現實中,並不是所有的X86程序都能夠直接切換到X64位的,以下就是幾種常見的情況:
1.目前的維護的較早的X86程序,公司沒有過多資源來將整個軟件切換到X64平臺;並且原有的X86版本是正常運行的,現在僅僅是數據量或者稍微增加,但是增加後的進程內存還在3.7G以下;
2.原有的X86程序用了較多的第三方庫,而部分第三方庫沒有X64版本的庫文件。
內存不足的先兆
1.對於C#程序來說,內存不足一般會引發異常,常見的異常原因有“內存不足”或者“圖片無法加載“;
2.對於C++程序,一般是內存申請操作失敗。
3.開啓大內存的方法

VS2015開啓大內存的方法

1.開啓方法 (1)利用管理員身份運行”VS2015 x64 x86兼容工具命令提示符”程序; (2)輸入命令:editbin/LARGEADDRESSAWARE D:\SIFT_RANSAC\Debug\SIFT_RANSAC.exe 2.檢查是否開啓成功 (1)利用管理員身份運行”VS2015 x64 x86兼容工具命令提示符”程序; (2)輸入命令:dumpbin /headers D:\SIFT_RANSAC\Debug\SIFT_RANSAC.exe 注意

1.內存開啓成功的標誌:在查看結果中的”FILE HEADER VALUES”段落中,會出現”Application can handle large (>2G) addresses”字樣;

2.當程序重新編譯後,原有的大內存信息會丟失,所有需要重新開啓;

3.在程序中,只需要針對執行文件開啓大內存即可,其他的文件非執行文件不需要再開啓。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章