Отображение памяти - это механизм, который сопоставляет часть файла или весь файл на диске с диапазоном адресов в адресном пространстве приложения. Затем приложение может получать доступ к файлам на диске таким же образом, как и к динамической памяти. Это ускоряет чтение и запись файлов по сравнению с использованием таких функций, как fread и fwrite.
Основными преимуществами отображения памяти являются эффективность, более быстрый доступ к файлам, возможность совместного использования памяти приложениями и более эффективное кодирование.
Доступ к файлам через карту памяти выполняется быстрее, чем с помощью функций ввода-вывода, таких как fread и fwrite. Данные считываются и записываются с использованием возможностей виртуальной памяти, встроенных в операционную систему, вместо того, чтобы выделять, копировать, а затем освобождать буферы данных, принадлежащие процессу.
MATLAB ® не получает доступ к данным с диска при первом создании карты. Он читает или записывает файл на диск только при обращении к определенной части карты памяти, а затем читает только эту часть. Это обеспечивает более быстрый произвольный доступ к отображенным данным.
Отображение файла в память позволяет получить доступ к данным в файле, как если бы эти данные были считаны в массив в адресном пространстве приложения. Первоначально MATLAB выделяет адресное пространство только для массива; он фактически не считывает данные из файла, пока не будет получен доступ к сопоставленной области. В результате отображенные на память файлы обеспечивают механизм, с помощью которого приложения могут обращаться к сегментам данных в чрезвычайно большом файле без необходимости сначала считывать весь файл в память.
Отображение памяти в приложении MATLAB позволяет получить доступ к данным файла с помощью стандартных операций индексирования MATLAB. После сопоставления файла с памятью можно считывать содержимое этого файла с помощью операторов MATLAB того же типа, которые используются для считывания переменных из рабочей области MATLAB. Содержимое сопоставленного файла выглядит так, как если бы он был массивом в активной рабочей области. Вы просто индексируете в этот массив для чтения или записи нужных данных из файла. Поэтому явные вызовы для fread и fwrite функции.
В MATLAB, если x является переменной, отображаемой в память, и y является данными, которые должны быть записаны в файл, то запись в файл так же проста, как
x.Data = y;
Отображенные на память файлы также обеспечивают механизм совместного использования данных между приложениями, как показано на рисунке ниже. Это достигается за счет того, что каждая секция карты приложения имеет один и тот же файл. Эту функцию можно использовать для переноса больших наборов данных между MATLAB и другими приложениями.

Кроме того, в одном приложении можно сопоставить один и тот же сегмент файла несколько раз.
То, какое преимущество вы получаете от сопоставления файла с памятью, зависит в основном от размера и формата файла, способа использования данных в файле и используемой платформы компьютера.
Сопоставление памяти лучше всего подходит для двоичных файлов и в следующих сценариях:
Для больших файлов, к которым требуется получить случайный доступ один или несколько раз
Для небольших файлов, которые необходимо считывать в память один раз и часто получать доступ
Для данных, которые требуется совместно использовать между приложениями
Когда вы хотите работать с данными в файле, как если бы это был массив MATLAB
Следующие типы файлов не полностью используют преимущества сопоставления памяти:
Форматированные двоичные файлы, такие как HDF или TIFF, которые требуют настраиваемых устройств чтения, не подходят для отображения памяти. Описание данных, содержащихся в этих файлах, может быть очень сложной задачей. Кроме того, доступ к данным непосредственно из сопоставленного сегмента невозможен, но вместо этого необходимо создать массивы для хранения данных.
Текстовые или ASCII-файлы требуют преобразования текста в сопоставленной области в соответствующий тип, чтобы данные были значимыми. Для этого требуется дополнительное адресное пространство.
Файлы размером более нескольких сотен мегабайт занимают значительное количество виртуального адресного пространства, необходимого MATLAB для обработки программы. Отображение файлов такого размера может привести к тому, что MATLAB будет чаще сообщать об ошибках нехватки памяти. Это более вероятно, если MATLAB работает в течение некоторого времени или память, используемая MATLAB, становится фрагментированной.
Из-за ограничений, установленных операционной системой и MATLAB, максимальный объем данных, который можно сопоставить с одним экземпляром карты памяти, составляет 2 гигабайта в 32-разрядных системах и 256 терабайтов в 64-разрядных системах. Если требуется сопоставить более этого предела, можно либо создать отдельные карты для различных областей файла, либо переместить окно одной карты в различные расположения в файле.
Отображение памяти работает только с данными, которые имеют ту же схему упорядочения байтов, что и собственный порядок байтов операционной системы. Например, поскольку системы Linux ® и Microsoft ® Windows ® Linus Torvalds используют упорядочение байтов little-endian, данные, созданные в системе Linux, можно считывать в системах Windows. Вы можете использовать computer для определения собственного порядка байтов текущей системы.