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