저는 약간의 속도를 얻기 위해 이전 R 코드를 C++로 재현하려고합니다. 이 코드는 미리로드 된 데이터 (13689 x 126 크기의 6 개 행렬)를 사용해야합니다 (각 파일의 크기는 .txt 파일에서 약 28MB입니다). R이 이것을 메모리에로드하는 데 아무런 문제가 없었습니다.C++에서 'large'데이터 파일을 읽으십시오.
나는 C++ 코드 (C++을 처음 사용함)를 만들었는데,이 데이터를 미리로드하려고합니다. (어쨌든 헤더 파일 btw에 미리로드 할 것입니까?). 내가 파일 (인텔 컴포저를 사용)를 컴파일 할 수 있습니다,하지만 난 한 .exe를 시작할 때, 그것은 즉시 충돌 : 더블 또는 배열을 사용하여
int i, j;
const int length_grid1 = 13689;
const int length_grid_pl = 126;
ifstream in;
//double M1_BETA[length_grid1][length_grid_pl]; // either this, or the other one
std::array<std::array<int, length_grid_pl>, length_grid1> M1_BETA;
in.open("preloaded_object/M1_BETA.txt");
for (i = 0; i < length_grid1; i++) {
for (j = 0; j < length_grid_pl; j++) {
in >> M1_BETA[i][j];
}
}
in.close();
두 버전은 작동하지 않습니다. 이것은로드 된 행렬 중 하나에서만 발생합니다 ... 그리고 그 중 6 개를로드해야합니다.
내 코드에서 문제가 없다고 생각합니다. 아무 문제없이 스스로 실행하는 데이터 차원을 줄이면됩니다.
모든 프로그램이로드되지 않으면 나중에 프로그램을 실행할 수 없습니다. 그리고 부품을 부분별로 다시로드하면 속도가 너무 느려져서 계산 속도가 빨라집니다 (그리고 C++로 바꿨습니다).
28MB가 너무 많아 프로그램이 충돌하나요? R이 예를 들어 어떤 문제도 없기 때문에 이상하게 보입니다 ...
그렇지 않으면 메모리에 저장되는 공간이 적어 지도록 미리로드 할 수 있습니까? 나중에 데이터 행을 쉽게 액세스 할 수 있어야합니다 (셀별로 셀이 중요하지 않으므로 필요한 행을 실제로 빠르게 액세스하는 것이 필요합니다).
또는 C++에서 언제든지 사용할 수있는 데이터를 저장하는 다른 방법이 있습니까?
미리 감사드립니다.
'std :: array, length_grid1> M1_BETA;는 일반적으로 스택에서 인스턴스화됩니다. 이는 대부분의 환경에서 사용할 수있는 스택에 비해 너무 큽니다. –
대용량 데이터는'std :: vector'를 사용해야합니다. – NathanOliver
std :: vector와 함께 작동합니다. 실제로 고마워요! 배열과의 차이점은 무엇입니까? –