Do not preallocate more space than the matrix size (when the sparse matrix boils down to a vector

This commit is contained in:
Gael Guennebaud 2017-07-20 10:13:48 +02:00
parent d580a90c9a
commit 1f4b24d2df

View File

@ -83,7 +83,7 @@ void assign_sparse_to_sparse(DstXprType &dst, const SrcXprType &src)
// eval without temporary // eval without temporary
dst.resize(src.rows(), src.cols()); dst.resize(src.rows(), src.cols());
dst.setZero(); dst.setZero();
dst.reserve((std::max)(src.rows(),src.cols())*2); dst.reserve((std::min)(src.rows()*src.cols(), (std::max)(src.rows(),src.cols())*2));
for (Index j=0; j<outerEvaluationSize; ++j) for (Index j=0; j<outerEvaluationSize; ++j)
{ {
dst.startVec(j); dst.startVec(j);
@ -107,7 +107,7 @@ void assign_sparse_to_sparse(DstXprType &dst, const SrcXprType &src)
DstXprType temp(src.rows(), src.cols()); DstXprType temp(src.rows(), src.cols());
temp.reserve((std::max)(src.rows(),src.cols())*2); temp.reserve((std::min)(src.rows()*src.cols(), (std::max)(src.rows(),src.cols())*2));
for (Index j=0; j<outerEvaluationSize; ++j) for (Index j=0; j<outerEvaluationSize; ++j)
{ {
temp.startVec(j); temp.startVec(j);