exponenta event banner

Обзор отображения памяти

Что такое отображение памяти?

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