В моем случае (64-битная Ubuntu с 16 ГБ памяти, используя Eigen3), я пишу MatrixXd m (M, M); где M = 100 000, во время работы программа вылетела и сообщила:
что (): std :: bad_alloc
Прервано (ядро сброшено)
Используя динамический 2 dim массив, программа работает отлично. Есть ли жесткое ограничение на размер (плотной) матрицы в Eigen?
Вы пытаетесь выделить 100000*100000
элементы по 8 байтов каждый, или 80 000 000 000 байтов (74,5 ГБ), что не удается, поскольку у вас есть только 16 ГБ памяти. Это приводит к сбою выделения памяти, поскольку он не может найти ни одного непрерывного блока памяти такого большого размера.
В Eigen нет фиксированного ограничения, но массив должен быть размещен в вашей системе.
Вы забыли о размере матричного элемента.
MatrixXd использует двойной
100000 * 100000 = 10000000000 элементов.
sizeof (double), вероятно, 8 в вашей системе.
Это означает, что для создания этой матрицы вам понадобится:
ширина * высота * размерof (double) => 100000 * 100000 * 8 / (1024 * 1024 * 1024) => 74,5 гигабайта памяти.