Когда следует использовать фиксированные размеры (например, Matrix4f), а когда лучше использовать динамические c размеры (например, MatrixXf)? Простой ответ: используйте фиксированные размеры для очень маленьких размеров, где это возможно, и используйте динамические c размеры для больших размеров или там, где это необходимо. Для небольших размеров, особенно для размеров меньше (примерно) 16, использование фиксированных размеров очень выгодно для производительности, поскольку позволяет Eigen избегать динамического c выделения памяти и развертывания циклов. Внутренне матрица Eigen фиксированного размера представляет собой простой массив, т. Е. Выполняет
Matrix4f mymatrix; на самом деле это просто
float mymatrix [16]; так что это действительно имеет нулевые затраты времени выполнения. В отличие от этого, массив матрицы размера c динамического размера всегда выделяется в куче, поэтому
MatrixXf mymatrix (rows, columns); означает выполнение
float mymatrix = new float [rows columns]; кроме того, объект MatrixXf сохраняет количество строк и столбцов в качестве переменных-членов.
Для матрицы фиксированного размера используется память по массивам. Однако выделение памяти в куче реализовано для матрицы размера Dynami c. Означает ли это, что использование памяти не реализовано в базовом классе?