プリミティブ ニューロンのシミュレーションを処理するために非常に大きな配列を設定しています。New[] は、配列にメモリ (約 8 ~ 9 ギガ) を割り当てるときに失敗します。C スタイルの malloc を取得してメモリを予約することはできましたが、値を割り当てようとするとすぐに、場所 0xffffffffffffffff を読み取るアクセス違反が発生します。
Visual Studio 2010 Professional を使用して、64 ビット Windows 7 を実行しています。入れ子になったループで malloc と new[] も試しましたが、それらもクラッシュします。
これが malloc で実行できない場合、他に何を考慮する必要がありますか? 大きなメモリ空間に非常に高速にアクセスできるものが必要です。ご検討をお願いいたします。
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <iomanip>
#include <locale>
#include <math.h>
using namespace std;
int nRows;
int nCols;
int nDepth;
int nData;
int main()
{
//unsigned long int brainSize=100;
//nRows = int(pow(brainSize,0.3333333333333333333333333333))+1;
nRows=80;
nCols=nRows;
nDepth=nRows;
nData=2000;
double brainData = nRows*nCols*nDepth*nData;
double brainBits = 4*brainData;
cout.imbue(std::locale(""));
cout << fixed << "Brain size : " << nRows*nCols*nDepth << " neurons \nBrain integers : " << setprecision(0) << brainData << "\nBrain bits: " << brainBits << endl;
__int64 ****brain;
brain = (__int64 ****)malloc(nRows*nCols*nDepth*nData*sizeof(__int64 ****));
cout << "Brain initialized.";
brain [2][2][2][2]=2; // error is here.
cout << brain[2][2][2][2];
int breaker;
cin >> breaker; //pause
return 0;
}