Как можно реализовать различное использование памяти для матрицы фиксированного размера и матрицы размера c? - PullRequest
0 голосов
/ 30 мая 2020

Я учусь пользоваться библиотекой Eigen. Как матрица фиксированного размера, так и матрица размера dynamic c являются производными от класса шаблона Matrix. По ссылке http://eigen.tuxfamily.org/dox-devel/group__TutorialMatrixClass.html

Когда следует использовать фиксированные размеры (например, 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. Означает ли это, что использование памяти не реализовано в базовом классе?

...