Обзор размещения в ОЗУ

Что такое размещение в ОЗУ?

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