I would like to write a very very tiny matrix/tensor library with minimal features, and API like Eigen.
What confused me is, setting a debug break point, does not take me into some destructor function, I get nothing.
To reproduce, use this snippet that uses Eigen:
#include <Eigen/Dense>
#include <stdio.h>
#include <iostream>
using namespace Eigen;
int main()
{
printf("hello Eigen\n");
{
MatrixXf m1(300, 400);
MatrixXf m2(300, 400);
MatrixXf m3 = m1 + m2;
std::cout << m3.rows() << std::endl;
printf("bye\n");
} // set a debug break point in this line, expecting going into its destructor and free memory, but there isn't
printf("-----------------\n");
return 0;
}
As a comparison, I simple created a Tensor template class, and when leaving its scope, its destructor is called:
template<class T>
class Tensor {
public:
int c, h, w;
int len;
T* data;
Tensor(int _c, int _h, int _w): c(_c), h(_h), w(_w) {
len = c * h * w;
data = new T[len];
}
~Tensor() {
if (data) {
free(data);
}
}
};
int main() {
// Tensor
{
printf("hello tensor\n");
Tensor<float> tensor(3, 2, 2);
printf("bye tensor\n");
} // set a debug break point here, Tensor class's destructor is called
return 0;
}
My question: when and where does Eigen's big matrix (with heap memory allocated) free its heap memory? And how can I see that?
update: I forget to mention that I was using Visual Studio 2019 Debug mode.