2

私はGNUg++を使用してコマンドラインプログラムをビルドおよびコンパイルしました。これは、主に深い継承、大量のオブジェクトの作成など、さまざまな理由でスタックを「オーバーフロー」させます。そこで、Mac OS Xでこの回避策に従って、リンク時の問題を解決しました。 :

-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000

Linuxでは、試してみulimit -s unlimitedました。この方法でプログラムを実行しても、セグメンテーション違反は発生しなくなります。

しかし、GNU g ++を使用してWindowsでコンパイルしようとすると、コンパイラは認識しません。

-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000

問題の回避策として他にどのようなオプションを使用しますか?

前もって感謝します

4

2 に答える 2

5

-Wl、--stack、somelargesizeはあなたが求めているもののように見えます。ただし、代わりに大量の割り当てにヒープを利用するようにコードをリファクタリングすることを強くお勧めします。アドレス空間は有限のリソースであり、「回避策」ではかなりの量のリソースが必要になります。

于 2009-09-02T15:06:01.917 に答える
1

このページでは、次のコマンドラインオプションを試してみることをお勧めします(-fno-stack-limitを検索してください)。

-fno-stack-limit

それ自体が失敗した場合は、この他のページでも追加することをお勧めします。

-fstack-check
于 2009-09-02T15:07:26.720 に答える