簡體   English   中英

如何編譯程序使其能夠在32位Linux上使用> 4GB內存?

[英]How to compile a program to make it capable to use >4GB memory on 32-bit Linux?

整個代碼用C,C ++和Fortran編寫。 是否可以使用超過4GB的內存。 現在它在達到3GB內存時總是崩潰。

如果可能,如何設置編譯選項(或配置標志)?

我們可以使用gcc,g ++,...或intel編譯器

我們的操作系統:Fedora 12 x32

cat /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority
bogomips : 5319.72
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual

不幸的是,你達到了極限

R> 2^32
[1] 4294967296

這是你的4 gb限制。 因此,無論操作系統是什么,您都無法為單個應用程序編制索引。

這是我們許多人切換到64位版操作系統的原因之一。 自20世紀90年代末以來,Linux就支持這一點 只需在64位切換到FC(或Ubuntu或...)。

一種可能的替代方案是安裝更多RAM(Linux將處理)並在應用程序的多個實例上對您的任務進行分段,從而有效地並行運行它。 但那可能不值得麻煩......

我相信,如果您將文件放在tmpfs文件系統(或hugetlbfs)中,並且在程序中一次放置一小塊(1 - 2 GB)的文件,您可以一次處理超過4 GB的數據。

地圖操作並不是那么快,所以如果你太隨意地跳過你的記憶,你將會受到性能打擊。

您需要將其工作集分區為<3 GB的塊,並在單獨的進程中處理每個塊。 通過管道或套接字連接進程。

這非常類似於將其開發到網絡/集群應用程序中,如果您想要可伸縮性,這可能不是一個壞主意。

暫無
暫無

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

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