Я использую 2D Eigen::Array
s для проекта, и мне нравится продолжать использовать их в случае огромных 2D массивов.
Чтобы избежать проблем с памятью, я подумал о том, чтобы использовать сопоставленные с памятью файлы для управления (чтения / изменения / записи) этими массивами, но я не могу найти рабочие примеры.
Самый близкий пример, который я нашел, это это на основе boost::interprocess
, но он использует общую память (хотя я бы предпочел иметь постоянное хранилище).
Отсутствие примеров заставляет меня беспокоиться, если есть лучшее альтернативное решение основной проблемы для моей проблемы. Это тот случай? Минимальный пример был бы очень удобен.
EDIT:
Это минимальный пример, объясняющий мой вариант использования в комментариях:
#include <Eigen/Dense>
int main()
{
// Order of magnitude of the required arrays
Eigen::Index rows = 50000;
Eigen::Index cols = 40000;
{
// Array creation (this is where the memory mapped file should be created)
Eigen::ArrayXXf arr1 = Eigen::ArrayXXf::Zero( rows, cols );
// Some operations on the array
for(Eigen::Index i = 0; i < rows; ++i)
{
for(Eigen::Index j = 0; j < cols; ++j)
{
arr1( i, j ) = float(i * j);
}
}
// The array goes out of scope, but the data are persistently stored in the file
}
{
// This should actually use the data stored in the file
Eigen::ArrayXXf arr2 = Eigen::ArrayXXf::Zero( rows, cols );
// Manipulation of the array data
for(Eigen::Index i = 0; i < rows; ++i)
{
for(Eigen::Index j = 0; j < cols; ++j)
{
arr2( i, j ) += 1.0f;
}
}
// The array goes out of scope, but the data are persistently stored in the file
}
}