Размещение в ОЗУ является механизмом, который сопоставляет фрагмент файла или целого файла, на диске к области значений адресов в адресном пространстве приложения. Приложение может затем получить доступ к файлам на диске таким же образом, это получает доступ к динамической памяти. Это делает чтения файла и пишет быстрее по сравнению с использованием функций, таких как fread
и fwrite
.
Основные преимущества размещения в ОЗУ являются эффективностью, более быстрым доступом к файлу, способность совместно использовать память между приложениями и более эффективное кодирование.
Доступ к файлам с помощью карты распределения памяти быстрее, чем использование функций ввода-вывода, таких как fread
и fwrite
. Данные считаны и записаны с помощью возможностей виртуальной памяти, которые встроены к операционной системе вместо того, чтобы иметь необходимость выделить, скопировать в, и затем освободить буферы данных, принадлежавшие процессу.
MATLAB® не получает доступ к данным от диска, когда карта сначала создается. Это только читает или пишет файл на диске, когда к заданной части карты распределения памяти получают доступ, и затем это только читает что определенная часть. Это обеспечивает более быстрый произвольный доступ к сопоставленным данным.
Отображение файла в память предоставляет доступ к данным в файле, как будто это данные было считано в массив в адресном пространстве приложения. Первоначально, MATLAB только выделяет адресное пространство для массива; это на самом деле не считывает данные из файла, пока вы не получаете доступ к сопоставленной области. В результате файлы с отображенной памятью обеспечивают механизм, которым приложения могут получить доступ к сегментам данных в чрезвычайно большом файле, не имея необходимость читать целый файл в память сначала.
Размещение в ОЗУ в вашем приложении MATLAB позволяет данным файла доступа с помощью стандартных операций индексации MATLAB. Если вы сопоставили файл с памятью, можно читать, содержимое того файла с помощью того же типа операторов MATLAB раньше читало переменные из MATLAB workspace. Содержимое отображаемого файла появляется, как будто они были массивом в в настоящее время активной рабочей области. Вы просто индексируете в этот массив, чтобы считать или записать желаемые данные из файла. Поэтому вам не нужны явные вызовы функций fwrite
и fread
.
В MATLAB, если x
является переменной с отображенной памятью, и y
является данными, которые будут записаны в файл, то запись в файл так же проста как
x.Data = y;
Файлы с отображенной памятью также обеспечивают механизм для обмена данными между приложениями, как показано в фигуре ниже. Это достигается при наличии каждой карты приложения разделы того же файла. Можно использовать эту функцию, чтобы передать большие наборы данных между MATLAB и другими приложениями.
Кроме того, в рамках отдельного приложения можно сопоставить тот же сегмент файла несколько раз.
То, сколько преимущества вы добираетесь от отображения файла к памяти, зависит главным образом от размера и формата файла, пути, которыми данными в файле используется, и компьютерная платформа, которую вы используете.
Размещение в ОЗУ работает лучше всего с двоичными файлами, и в следующих сценариях:
Для больших файлов, к которым вы хотите получить доступ случайным образом один или несколько раз
Для маленьких файлов, которые вы хотите считать в память однажды и доступ часто
Для данных, которые вы хотите совместно использовать между приложениями
Когда это необходимо, чтобы работать с данными в файле, как будто это был массив MATLAB
Следующие типы файлов не полностью используют преимущества размещения в ОЗУ:
Отформатированные двоичные файлы как HDF или TIFF, которые требуют индивидуально настраиваемых читателей, не хороши для размещения в ОЗУ. Описание данных, содержавшихся в этих файлах, может быть очень комплексной задачей. Кроме того, вы не можете получить доступ к данным непосредственно от сопоставленного сегмента, но должны вместо этого создать массивы, чтобы содержать данные.
Текст или ASCII-файлы требуют, чтобы вы преобразовали текст в сопоставленной области к соответствующему типу для данных, чтобы быть значимыми. Это поднимает дополнительное адресное пространство.
Файлы, которые больше, чем несколько сотен мегабайтов в размере, используют существенное количество виртуального адресного пространства, необходимого MATLAB, чтобы обработать вашу программу. Отображение файлов этого размера может привести к MATLAB, сообщив об ошибках из памяти чаще. Это более вероятно, если MATLAB запускался в течение некоторого времени, или если память, используемая MATLAB, становится фрагментированной.
Из-за пределов, установленных операционной системой и MATLAB, максимальный объем данных, можно сопоставить с единственным экземпляром карты распределения памяти, 2 гигабайта в 32-битных системах и 256 терабайт в 64-битных системах. Если необходимо сопоставить больше, чем этот предел, можно или создать отдельные карты для различных областей файла, или можно переместить окно одной карты в другие места в файле.
Размещение в ОЗУ работает только с данными, которые имеют ту же схему порядка байтов как нативный порядок байтов вашей операционной системы. Например, потому что и Linus Torvalds' Linux® и системы Microsoft® Windows® используют порядок байтов с прямым порядком байтов, данные, созданные в системе Linux, могут быть считаны в системах Windows. Можно использовать функцию computer
, чтобы определить нативный порядок байтов существующей системы.