2012-02-11 7 views
0

可能な二重に> 1GBのメモリアレイを割り当てるためのコードが必要になります。私はCUDA/OpenCVのなしで使用する場合、私はこのコードを初期化することはできません
how to increase memory limit in Visual Studio C++は動的にVisual StudioのC++

#include<iostream> 
    using namespace std; 
    int main() 
    { 
    double *arr,*arr2,*arr3; 
    arr=new double[100000000]; 
    arr2=new double[100000000]; 
    arr3=new double[100000000]; 
    //std::bad_alloc at memory location 0x001ff700 error is what I get when I try to allocate 2.4gb out of 3.3gb available. 
    return 0; 
    } 

私は、Windows対Linuxをcompatibilites不満、私はちょうど、Windowsのサーバマシン上でこのコードの実行を作りたいわけではないので、私が限界のような種類が行ういるWindows用の任意のC++コンパイラにオープンしています発生しません。 ありがとう

+2

割り当てコードを記入してください。 – ybungalobill

+0

そのコードは、gccで完全に機能する主にCUDA/OpenCVベースのコードの1行でした。 mallocまたはnewを実行すると、スタックのオーバーフローが発生します。また、私はOpenCV形式であまりにも多くの画像を取得しようとするとstackoverflowを取得します(この記事のメモリ制限の問題のリンクを参照してください)。 – daerty0153

+3

そこに投稿したコードでは、スタックに* 1.4GB **のメモリ*を割り当てます。あなたはそれをすることはできません。私はあなたがmalloc、おそらく別のエラーを使用するとき、またはあなたが何かを理解していない可能性がstackoverflowを得るとは思わない。とにかく、これはあなたが問題を再現する関連する*最小*コードだけを投稿すべき理由です。また、 "Win32"ではなくx64 *のアプリケーションをコンパイルしてください。何らかの理由でVisual Studioがデフォルトで32ビット用にコンパイルされます。 – ybungalobill

答えて

4

これはx86ですか? LARGEADDRESSAWAREを有効にしましたか?時にはそれは私が働くためにより大きな割り当てを得るのを助けました。

+0

私はこれが2GBを超えるアドレス用であると信じています。私は1〜2GBの制限に満足しています。私はそこに到達することができません。 200mbを超える交差点でのstackoverflow。 – daerty0153

+1

これはすでに1GBまで持っていて、2GBの制限を超えて私をプッシュしなかったlargishのallocを作ろうとしていたときに役立ちました。最初の200mbの割り当てに問題があるなら、まあまあ同じ問題はないと思います.... – rounin

2

CPUにそのサイズのメモリを割り当てても問題ありません。 mallocが100MBの数倍で動作しない場合、何かが重大に間違っています。あなたのプログラムのメモリ使用量は?それはひどく断片化されているのでしょうか?

ヒープから割り当てるときにスタックオーバーフローが発生するのはなぜですか?あなたはallocaを使っていますか?

VirtualAllocファミリの全ページを直接割り当てることができます。

EDIT:あなたの前の質問を見て、私はあなたのメイン関数のスタック上に巨大な多次元配列を宣言しているのを見ています(二重[..] [..] [..]))。これは、スタックオーバーフローを起こす可能性が最も高いです。この多くのメモリをスタックに割り当てないでください。代わりにヒープに割り当てます(malloc/newを使用)。

2

投稿した制限とエラーメッセージ(0x001ff700)の32ビットメモリアドレスは、アプリケーションの32ビットバージョンをコンパイルしたことを示します。これはVisual Studioのデフォルトです。 x64をターゲットにするようにVisual Studioを構成してください。詳細は、MSDNを参照してください。