2014-09-30 2 views
-6

크기가 N1과 N2 인 두 개의 열이 있습니다. 크기는 모두 10 억 개가 넘습니다. 이제 벡터를 정의하고 N1 X N2 크기로 크기를 조정하려고합니다.메모리 액세스 오류 벡터 크기 조정

아래와 같이 벡터 크기 조정 기능을 사용하여 구현하려고했지만 메모리 액세스 오류가 발생했습니다. 이것을 달성 할 다른 방법이 있습니까? 제안

+5

더 많은 RAM을 구입 :

이 방법 뒤에 아이디어에 대한 자세한 내용은 아웃 오브 핵심 알고리즘에 대한이 쪽을 확인하시기 바랍니다? – Borgleader

+2

'int'(4 바이트)의 벡터를 가정하면 10 억분의 1 억입니다. 빠른 근사값은 4000 페타 바이트 또는 4000000000GB입니다. 그것은 큰 벡터입니다. – CoryKramer

+2

@Borgleader 아마추어 * 구매 * RAM, 실제 프로그래머 [다운로드 RAM 더] (http://www.downloadmoreram.com/)! – CoryKramer

답변

0

에 대한

myvector.resize(N1*N2); 

덕분에 정말 메모리에있는 모든 항목을 저장할 수 있습니까? 행렬의 작은 블록으로 작업 할 수 있는지 확인해야합니다 (있는 경우). 메모리에있는 모든 항목을 저장하는 설명 된 것과 같은 큰 작업의 경우 확장 성이 좋지 않습니다. 내가 한 일 : 블록을 만들어서 조작하고 다시 매체에 씁니다. 이렇게하면 메모리 부족 오류가 발생하지 않습니다. http://en.wikipedia.org/wiki/Out-of-core_algorithm

+0

디스크에서 메모리로 또는 그 반대로 끌어 당기는이 방법을 사용하더라도 디스크에있는 공간의 양을 여전히 초과합니다 (위의 내 의견을 보면). 신중하게 배열하면 희소 배열 선형 대수 알고리즘으로 도망 갈 수 있습니다. – CoryKramer

+0

맞아요.하지만 이것과 같은 문제를 어떻게 처리 할 수 ​​있을지 생각해 보는 것도 문제가있는 곳을 이해하는 시작입니다. – KimKulling