我設置了一個非常大的數組來處理原始神經元模擬。爲陣列分配內存(大約8-9 Gig)時,新[]會出現問題。我能夠獲得C風格的malloc來保留內存,但只要我嘗試分配一個值,就會得到訪問衝突讀取位置0xffffffffffffffff。malloc與巨大的多維數組,失敗的神經科學模擬
我使用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;
}
謝謝你的回覆。我有12G的DDR3內存可用;發佈的數組<95%可用。 。我已經縮小了數組值,佔用不到20%的RAM;崩潰是一樣的。它似乎主要是在第四維(nData)比其他部分大得多時這樣做的。我可能無法使用該磁盤,因爲我會將部分「大腦」劃分爲異步CPU線程或稍後更有可能的GPU內核。我按照你的建議添加了size_t,但收到相同的崩潰?我用下面的代碼替換了這一行:brain =(__int64 ****)malloc(size_t(nRows * nCols * nDepth * nData * sizeof(__ int64 ****))); – ScienceDilletante 2012-04-19 03:28:38