2013-05-18 2 views
3

그래서처럼 uBLAS 행렬을 가지고 : 나는 행렬에 계산의 세트로 끝났어요 일단uBLAS 매트릭스 명확 메모리

boost::numeric::ublas::matrix<double> mat(50000,50000); 

, 나는 메모리가 해제합니다.

저는 docs에 따라 mat.clear()을 사용하여 "매트릭스를 지 웁니다". 그러나 내 프로그램은 계속 메모리가 부족합니다.

헤더에 파고,이 찾을 :

void clear() { 
    std::fill (data().begin(), data().end(), value_type/*zero*/()); 
} 

그래서 clear()와 명확한 의미의 문제가있다.

그렇다면 메모리가 해제되었는지 어떻게 확인해야합니까?

+0

당신이 일어날 수행을 해결책을 발견하기 위해 문제에? – k1next

+0

이 문제에 대한 해결책을 찾았습니까? 나는 그에게 똑같은 문제에 부딪치고있는 것처럼 보인다. 문제를 효과적으로 처리하려면 행렬의 크기를 (0,0)으로 조정해야합니다. 나는 그것을 할 수있는 "올바른"방법이 있는지 궁금 해서요. – Devil

+0

@Devil,하지만 메모리를 해제하도록 크기가 조정되고 있습니까? 예를 들어,'std :: vector'를 사용하면, 벡터가 나중에 다시 확장 될 수 있고 할당이 비싸기 때문에 resize는 그러한 보장을하지 않습니다. 대신 C++ 11의'shrink_to_fit()'함수를 사용해야합니다. 나는이 문제에 대한 적절한 해결책을 찾지 못했고 결국에는 std :: vector의 vector로 바꿨다. 왜냐하면 나는 주로 uBLAS를 편리한 2d 행렬로 사용하기를 원했기 때문이다. – Richard

답변

0

메모리를 반환하려는 우아 방법은 매트릭스 크기를 조정하는 것입니다 :

내가 크기 값 나 자신에 대해 0을 사용하여 시도하지 않은 비록
mat.resize(0,0,false); 

...