Стек Eigen3 или куча? - PullRequest
       54

Стек Eigen3 или куча?

0 голосов
/ 12 февраля 2019

Если я напишу в функции следующую локальную переменную:

Eigen::VectorXd v = Eigen::Vector2d(1.0,2.0);

Распределено ли v в стеке или в куче?

1 Ответ

0 голосов
/ 12 февраля 2019

Сам объект 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

Для небольших объектов вы почти всегда предпочитаете использовать векторы / матрицы фиксированного размера, если вы знаете размер во время компиляции.

...