首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eigen3堆栈还是堆?

Eigen3堆栈还是堆?
EN

Stack Overflow用户
提问于 2019-02-12 13:02:27
回答 1查看 442关注 0票数 0

如果我在函数中写入以下局部变量:

代码语言:javascript
复制
Eigen::VectorXd v = Eigen::Vector2d(1.0,2.0);

v是在堆栈上还是在堆上分配的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-12 13:22:48

对象v本身在堆栈上分配,并将包含一个指针和一个索引变量。在构建v期间,堆上将分配额外的16个字节。

简化了,类似这样的事情发生了:

代码语言:javascript
复制
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

对于小型对象,如果您在编译时知道大小,那么您几乎总是更喜欢使用固定大小的向量/矩阵。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54650728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档