GNU/Linux >> Linux の 問題 >  >> Linux

C++11:g++-4.7 内部コンパイラ エラー

あなたのプログラムは不当な量のメモリを必要としているようです (おそらく、テンプレートの展開が多すぎるためです)。

最近の g++-trunk を使用する :

gcc version 4.8.0 20121026 (experimental) [trunk revision 192860] (GCC) 

次の zsh 制限を使用:

   % limit          
   cputime         unlimited
   filesize        unlimited
   datasize        15000MB
   stacksize       8MB
   coredumpsize    400MB
   memoryuse       15000MB
   maxproc         128166
   descriptors     1024
   memorylocked    64kB
   addressspace    16000MB
   maxfilelocks    unlimited
   sigpending      128166
   msgqueue        819200
   nice            0
   rt_priority     0
   rt_time         unlimited

(これは、i3770K Intel プロセッサと 16Gb RAM を搭載した Debian/Sid/AMD64 上にあります)

私は得ています:

  % time g++-trunk -std=gnu++11 andrew.cc -o andrew
  virtual memory exhausted: Cannot allocate memory
  g++-trunk -std=gnu++11 andrew.cc -o andrew :
  108.25s user 3.28s system 89% cpu 2:03.98 total

したがって、テンプレートの展開には非常に多くのメモリが必要なため、プログラミングは合理的ではないようです。

これが GCC のバグとして受け入れられるかどうかはわかりません。 C++ テンプレートのマクロ展開はチューリング完全であることが知られており、壁にぶち当たるだけです。また、GCC トランクは致命的ではあるが理解できるエラーを報告します。

この話の教訓は、おそらく limit を使用して、適切に (システムとハードウェアと互換性のある制限で) setrlimit(2) を設定することです。 zsh 組み込みまたは ulimit 組み込みの bash。


Linux
  1. 最も頻繁に使用される 15 の GCC コンパイラ コマンド ライン オプション

  2. struct sigaction 不完全エラー

  3. gcc -O2 とエラーが発生しない場合の比較

  1. libgcc xgcc エラーのコンパイル

  2. Linux で C++ ソース ファイルに対して 'gcc' を実行すると、cc1plus:out of memory allocating ... エラー メッセージが表示される

  3. configure:エラー:$PATH に受け入れ可能な C コンパイラが見つかりません

  1. 500内部サーバーエラーとは何ですか

  2. シングルビットメモリエラーは Linux にどのように影響しますか?

  3. Linux で ECC エラーの通知を受け取るにはどうすればよいですか?