Сам объект 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
Для небольших объектов вы почти всегда предпочитаете использовать векторы / матрицы фиксированного размера, если вы знаете размер во время компиляции.