J'ai une matrice uBLAS, comme ceci:matrice uBLAS mémoire claire
boost::numeric::ublas::matrix<double> mat(50000,50000);
Une fois que je suis fait avec un ensemble de calculs sur la matrice, je veux sa mémoire libérée.
J'ai utilisé mat.clear()
qui, selon le docs, "efface la matrice". Mais mon programme continue de manquer de mémoire.
Creuser dans les en-têtes, je trouve ceci:
void clear() {
std::fill (data().begin(), data().end(), value_type/*zero*/());
}
Donc, il y a un problème sémantique clair avec clear()
.
La question est alors, comment puis-je m'assurer que la mémoire est libérée?
Est-ce que vous arrive d'avoir trouvé une solution au problème? – k1next
Avez-vous trouvé une solution à ce problème? Il semble que je rencontre le même problème. Une façon élégante de traiter le problème serait de redimensionner la matrice à (0,0). Je me demandais s'il y avait une «bonne» façon de le faire. – Devil
@Devil, mais le redimensionnement est-il garanti pour libérer de la mémoire? Par exemple, avec 'std :: vector', un redimensionnement ne constitue pas une telle garantie puisque le vecteur peut être agrandi plus tard et que les allocations sont chères. Au lieu de cela, la fonction C++ 11 'shrink_to_fit()' doit être utilisée. Je n'ai jamais trouvé de solution adéquate à ce problème et j'ai fini par utiliser un vecteur std :: de std :: vectors puisque je voulais surtout uBLAS comme une matrice 2D pratique. – Richard