如果我在函数中写入以下局部变量:
Eigen::VectorXd v = Eigen::Vector2d(1.0,2.0);v是在堆栈上还是在堆上分配的?
发布于 2019-02-12 13:22:48
对象v本身在堆栈上分配,并将包含一个指针和一个索引变量。在构建v期间,堆上将分配额外的16个字节。
简化了,类似这样的事情发生了:
struct VectorXd {
double* data;
ptrdiff_t rows;
};
void foo(){
VectorXd v;
v.data = new double[2]; // actually uses an aligned malloc instead of new
v.rows = 2;
v.data[0] = 1.0; v.data[1] = 2.0;
// At destruction:
delete[] v.data;
}要查看在您的情况下实际发生了什么,请查看:https://godbolt.org/z/GYFmj0
对于小型对象,如果您在编译时知道大小,那么您几乎总是更喜欢使用固定大小的向量/矩阵。
https://stackoverflow.com/questions/54650728
复制相似问题