2017-08-10 26 views
0

私は、Arch Linuxを搭載したARMv7ボードにソフトウェアをビルドしようとしています。 また、ソフトウェアのためにPGOビルドをビルドします。最初のビルドはエラーなしでコンパイルされますが、2番目のビルドは、ビルドにプロファイル最適化されたディレクトリを使用しているよりもクラッシュします。 私は現在、私が2GB RAMを持ってここにバイトを割り当てるメモリが不足しています

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

を、このエラーメッセージが表示されました。 私は私ができるほどの大きさの私のスワップファイル(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

これは、どちらかがあることが原因で、

  • メモリが
  • ディスクがいっぱいであるビルド私の中に私に何度も起こったが、私は同じ「メモリを割り当てることができませんでした」しまった

いっぱいですどちらの場合もエラー。すべてのRAM /スワップメモリ​​が使用されているかどうかを調べるには、topコマンドからメモリ使用量を確認してください。

また、dfコマンドを使用してディスクの使用状況を確認してください。例:df -khコンパイルドライブがいっぱいです

32ビットシステムの場合、メモリは2^32〜4GBに制限されます。 3GB barrierを参照してください。スワップサイズを大きくすることは役に立ちません。

64ビットシステムの場合、メモリの上限が高いため、コンパイラ/リマーがアクセスしようとしているファイル/フォルダのアクセス権に問題がある可能性があります。

+0

だから私は20Gのスワップファイルを持っているので、私は混乱しています。合計RAMが使用されますが、スワップファイルの場合は2Gのみが使用され、上記のエラーでクラッシュします。 'df -kh'は、コンパイルドライブに24Gの空き容量が残っていることを示しています。 – Elec

+1

システムが32ビットであるかどうかはわかりません。その場合、最もアクセス可能なメモリレベルは2G RAM + 2Gスワップです。それが64ビットシステムなら、そのような問題はありません。 64ビットシステムでも引き続き問題が続く場合は、アクセスされたファイル/フォルダのどこかで権限の問題が発生する可能性があります。この情報も含めて回答を編集します。 – SajithP

+1

32ビットシステムです。私が今行ったことは、64Bitシステムでこれをクロスコンパイルし、ツールチェーンを使ってパフォーマンステストを作成し、これをボードにコピーして、対策を開始することです。ご協力いただきありがとうございます! – Elec

関連する問題