Размещение в ОЗУ является механизмом, который сопоставляет фрагмент файла или целого файла, на диске к области значений адресов в адресном пространстве приложения. Приложение может затем получить доступ к файлам на диске таким же образом, это получает доступ к динамической памяти. Это делает чтения файла и пишет быстрее по сравнению с использованием функций такой как 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-битных системах. Если необходимо сопоставить больше, чем этот предел, можно или создать отдельные карты для различных областей файла, или можно переместить окно одной карты в другие места в файле.
Размещение в ОЗУ работает только с данными, которые имеют ту же схему порядка байтов как нативный порядок байтов вашей операционной системы. Например, потому что и Linus Torvalds' Linux® и системы Microsoft® Windows® используют порядок байтов с прямым порядком байтов, данные, созданные в системе Linux, могут быть считаны в системах Windows. Можно использовать computer
функция, чтобы определить нативный порядок байтов вашей существующей системы.