2017-08-10 90 views
0

我試圖用Arch Linux在ARMv7板上構建我的軟件。 另外我爲我的軟件構建了一個PGO構建。第一個構建編譯沒有錯誤,但第二個構建崩潰比我使用我的配置文件優化目錄的構建。 我在這裏得到這個錯誤消息內存不足分配字節

cc1: out of memory allocating 66574076 bytes after a total of 148316160 bytes 

目前我有2GB的RAM。 我試圖設置我的交換文件一樣大,我可以(20G),也是我的ulimit是無限制

$ ulimit -a 
core file size   (blocks, -c) unlimited 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 14879 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 14879 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

但它仍然無法編譯,我不知道我能做些什麼另外這裏我編譯程序。

+0

這可能是因爲編譯器中的內存碎片太多,以至於沒有找到這個大小的塊......無論交換是多大,用戶空間在ARMv7上都不是那麼大,而是限於少於4G。 –

+0

@AnttiHaapala所以你的意思是我在這邊什麼都不能做? – Elec

+0

注意['malloc'甚至不會*錯誤*內存不足](https://stackoverflow.com/questions/7947849/can-i-rely-on-malloc-returning-null)如果它不是對於虛擬內存 –

回答

1

這在我的構建由於要麼是,

  • 內存已滿
  • 磁盤發生在我身上很多次充滿

我得到了同樣的「無法分配內存」兩種情況都有誤只需從top命令中檢查內存使用情況,看看是否使用了所有的RAM /交換內存。

還使用df命令檢查磁盤使用情況。例如df -kh看到您的編譯驅動器已滿

如果是32位系統,則最大內存將限制爲2^32〜4GB。請參閱3GB barrier。增加交換大小將無濟於事。

如果它是64位系統,內存限制很高,所以其他可能性可能是編譯器/ limker試圖訪問的任何文件/文件夾中的權限問題。

+0

這就是爲什麼我很困惑,因爲我有一個20G的交換文件。使用的是全部RAM,但對於交換文件,僅使用了2G,並且與上面給出的錯誤一起使用。 'df -kh'顯示我的編譯驅動器上剩有24G空閒空間。 – Elec

+1

我不確定你的系統是否是32位的。如果是這樣的話,那麼你最容易獲得的內存級別可以是2G RAM + 2G Swap。如果它是一個64位系統,不會有這樣的問題。如果它是一個64位系統,但問題仍然存在,那麼其他可能性是訪問的文件/文件夾中某處的權限問題。我將編輯答案以包含這些信息。 – SajithP

+1

這是一個32位系統。我現在所做的是:在64位系統上進行交叉編譯,並用工具鏈構建我的性能測試,然後將其複製到電路板上並開始採取措施。謝謝你的幫助! – Elec

相關問題