Управление кучей с Eigen :: Map: это ответственность пользователя или Eigen :: Matrix? - PullRequest
0 голосов
/ 30 июня 2019

Кто обрабатывает нераспределение кучи, когда Eigen :: Map используется с сегментом памяти кучи для создания MAtrix?

Я не смог найти никакой информации относительно внутреннего управления сегментами памяти данных Matrix, когда Eigen:: Карта вызывается для построения матрицы.Вот документ, который я просмотрел: https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html

Должен ли я обработать удаление сегмента памяти, когда я закончу с моей матрицей "mf" в коде ниже?

  int rows(3),  cols (3);
  scomplex *m1Data = new scomplex[rows*cols];
  for (int i = 0; i<cols*rows; i++)
  {  
    m1Data[i] = scomplex( i, 2*i);
  }

  Map<MatrixXcf> mf(m1Data, rows, cols);

Byтеперь, если я установлю точку останова в функции (./Eigen/src/core/util/Memory.h):

EIGEN_DEVICE_FUNC inline void aligned_free(void *ptr)

она не сработает при выходе из основного.

МайЯ спрашиваю вас, должен ли я считать, что должен удалить сегмент памяти, когда я больше не использую свою матрицу?

Cheers

Sylvain

1 Ответ

3 голосов
/ 01 июля 2019

Объект Map не принимает на себя ответственность за передаваемую ему память. Это может быть просто взгляд на другую матрицу. В этом случае вы определенно не захотите освободить память.

Чтобы процитировать страницу с учебником, на которую вы ссылаетесь :

Иногда вы можете иметь предопределенный массив чисел, который вы хотите использовать в Eigen как вектор или матрицу. Хотя одним из вариантов является создание копии данных, чаще всего вы, вероятно, захотите повторно использовать эту память как собственный тип.

Итак, нижняя строка, вы должны удалить память, выделенную и использованную с Map.

...