Создайте карту распределения памяти к файлу
m = memmapfile(filename)
m = memmapfile(filename,Name,Value)
сопоставляет существующий файл, m
= memmapfile(filename
)filename
, к памяти и возвращает карту распределения памяти, m
.
Размещение в ОЗУ является механизмом, который сопоставляет фрагмент файла или целого файла, на диске к области значений адресов памяти в адресном пространстве MATLAB®. Затем MATLAB может получить доступ к файлам на диске таким же образом, это получает доступ к динамической памяти, ускоряя чтение файла и запись. Размещение в ОЗУ позволяет вам работать с данными в файле, как будто это был массив MATLAB.
задает свойства m
= memmapfile(filename
,Name,Value
)m
с помощью одного или нескольких аргументов пары "имя-значение". Например, можно задать формат данных в файле.
Отображение Целого Файла uint8 Данных
В командной строке создайте файл примера в своей текущей папке под названием records.dat
, содержа 10 значений uint8
.
myData = uint8(1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID, myData,'uint8'); fclose(fileID);
Создайте карту для records.dat
. При использовании memmapfile
форматом данных по умолчанию является uint8
, таким образом, имя файла является единственным необходимым входным параметром в этом случае.
m = memmapfile('records.dat')
m = Filename: 'd:\matlab\records.dat' Writable: false Offset: 0 Format: 'uint8' Repeat: Inf Data: 10x1 uint8 array
MATLAB сопоставляет целый файл records.dat
с памятью, устанавливая все свойства карты распределения памяти к их значениям по умолчанию. Карта распределения памяти присвоена переменной, m
. В этом примере команда сопоставляет целый файл как последовательность 8-битных целых чисел без знака и дает доступ только для чтения вызывающей стороны к его содержимому.
Просмотрите сопоставленные данные путем доступа к свойству Data
m
.
m.Data
ans = 1 2 3 4 5 6 7 8 9 10
Создайте карту распределения памяти для данных с двойной точностью. Синтаксис подобен при определении других типов данных.
В командной строке создайте файл примера в своей текущей папке под названием records.dat
, содержа 10 значений double
.
myData = (1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID,myData,'double'); fclose(fileID);
Создайте карту распределения памяти для records.dat
и установите свойство Format
для вывода к 'double'
.
m = memmapfile('records.dat','Format','double') ;
memmapfile, m
, содержит следующие свойства: Filename
, Writable
, Offset
, Format
, Repeat
и Data
. Отобразить любое свойство, например, Format
, m.Format
типа в командном окне.
m.Format
ans = 'double'
Свойство Data
содержит 10 значений с двойной точностью в records.dat
.
Создайте карту распределения памяти для большого массива данных int32
. Задайте доступ для записи, и Format
не по умолчанию и значения Offset
.
В командной строке создайте файл примера в своей текущей папке под названием records.dat
, содержа 10 000 значений int32
.
myData = int32([1:10000]); fileID = fopen('records.dat','w'); fwrite(fileID,myData,'int32'); fclose(fileID);
Создайте карту распределения памяти для records.dat
и установите свойство Format
для вывода к int32
. Кроме того, установите свойство Offset
игнорировать первые 9 000 байтов в файле и свойство Writable
разрешить доступ для записи.
m = memmapfile('records.dat',... 'Offset',9000,... 'Format','int32',... 'Writable',true);
Значение Offset
9000
указывает, что первые 9 000 байтов records.dat
не сопоставлены.
Введите имя карты распределения памяти, чтобы видеть текущие настройки для всех свойств.
m
m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 9000 Format: 'int32' Repeat: Inf Data: 7750x1 int32 array
Свойство Format
указывает, что любая операция чтения или операция записи, сделанная с помощью карты распределения памяти, читают и пишут содержимое файла как последовательность 32-битных целых чисел со знаком. Свойство Data
содержит только 7 750 элементов, потому что первые 9 000 байтов records.dat
, представляя первые 2 250 значений в файле, не сопоставлены.
Просмотрите первые пять элементов сопоставленных данных путем доступа к свойству Data
m
.
m.Data(1:5)
ans = 2251 2252 2253 2254 2255
Создайте карту распределения памяти для области файла, содержащего 100 значений с двойной точностью.
В командной строке создайте файл примера в своей текущей папке под названием mybinary.bin
, содержа 100 значений с двойной точностью.
randData = gallery('uniformdata',[100,1],0,'double'); fileID = fopen('mybinary.bin','w'); fwrite(fileID,randData,'double'); fclose(fileID);
Сопоставьте первые 75 значений в mybinary.bin
к 5 5 3 массивами значений с двойной точностью, на которые можно сослаться в структуре карты распределения памяти с помощью имени поля x
. Задайте эти параметры с аргументом пары "имя-значение" Format
.
m = memmapfile('mybinary.bin',... 'Format',{'double',[5 5 3],'x'})
m = Filename: 'd:\matlab\mybinary.bin' Writable: false Offset: 0 Format: {'double' [5 5 3] 'x'} Repeat: Inf Data: 1x1 struct array with fields: x
Свойство Data
является массивом структур, который содержит сопоставленные значения в поле, x
.
Присвойте сопоставленные данные переменной, A
. Поскольку свойство Data
является массивом структур, необходимо индексировать в поле, x
, чтобы получить доступ к данным.
A = m.Data.x;
Просмотрите информацию о A
.
whos A
Name Size Bytes Class Attributes A 5x5x3 600 double
Сопоставьте сегменты файла с различными формами массивов и типами данных к памяти.
В командной строке создайте файл примера в своей текущей папке под названием mybinary.bin
. Запишите данные uint16
и данные с двойной точностью, представляющие демонстрационное давление, температуру и значения объема в файл. В этом случае, каждый из массивов uint16
50 на 1, и массивы с двойной точностью 5 на 10. k
является демонстрационным масштабным коэффициентом.
k = 8.21; [pres1,temp1] = gallery('integerdata',[1,300],[50,1],0,'uint16'); vol1 = double(reshape(k*temp1./pres1,5,10)); [pres2,temp2] = gallery('integerdata',[5,500],[50,1],5,'uint16'); vol2 = double(reshape(k*temp2./pres2,5,10)); fileID = fopen('mybinary.bin','w'); fwrite(fileID,pres1,'uint16'); fwrite(fileID,temp1,'uint16'); fwrite(fileID,vol1,'double'); fwrite(fileID,pres2,'uint16'); fwrite(fileID,temp2,'uint16'); fwrite(fileID,vol2,'double'); fclose(fileID);
Сопоставьте файл с массивами, доступными уникальными именами. Задайте поле, pressure
, содержа 50 на 1 массив значений uint16
, сопровождаемых полем, temperature
, содержа 50 на 1 значения uint16
. Задайте поле, volume
, содержа 5 на 10 массив значений с двойной точностью. Используйте массив ячеек, чтобы задать формат сопоставленной области и повторить шаблон дважды.
m = memmapfile('mybinary.bin',... 'Format',{'uint16',[50 1],'pressure';... 'uint16',[50,1],'temperature';... 'double',[5,10],'volume'},'Repeat',2)
m = Filename: 'd:\matlab\mybinary.bin' Writable: false Offset: 0 Format: {'uint16' [50 1] 'pressure' 'uint16' [50 1] 'temperature' 'double' [5 10] 'volume'} Repeat: 2 Data: 2x1 struct array with fields: pressure temperature volume
Свойство Data
карты распределения памяти, m
, 2 1 массив структур, потому что Format
применяется дважды.
Скопируйте свойство Data
в переменную, A
. Затем просмотрите последний блок данных double
, которые можно получить доступ к использованию имени поля, volume
.
A = m.Data; myVolume = A(2).volume
myVolume = 2 13 32 5 5 16 4 22 3 8 2 9 53 38 13 19 23 85 2 120 29 10 6 1 2 5 6 58 20 11 7 15 4 1 5 18 1 4 14 8 9 8 4 2 0 9 8 6 3 3
fileName
Имя файла, чтобы сопоставитьИмя файла, чтобы сопоставить включая расширение файла, заданное как вектор символов или представить скаляр в виде строки. Аргумент filename
не может включать подстановочные символы (например, *
или ?
).
Пример: 'myFile.dat'
Типы данных: char | string
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
m = memmapfile('myFile.dat','Format','int32','Offset',255)
сопоставляет данные int32
в файле, myFile.dat
, к памяти, начинающей с 256-го байта.'Writable'
— Тип доступа позволен сопоставленной областиfalse
(значение по умолчанию) | true
Тип доступа позволен сопоставленной области, заданной как пара, разделенная запятой, состоящая из 'Writable'
и или true
или false
. Если свойство Writable
установлено в false
, сопоставленная область только для чтения. Если true
, то доступ для записи позволен.
Пример: 'Writable',true
Типы данных: логический
'Offset'
— Количество байтов от запуска файла, чтобы запуститься сопоставленной областиКоличество байтов от запуска файла к запуску сопоставленной области, заданной как пара, разделенная запятой, состоящая из 'Offset'
и неотрицательного целого числа. Это значение основано на нуле. Таким образом, значение Offset
0 представляет запуск файла.
Пример: 'Offset',1024
Типы данных: double
формат
Формат сопоставленной области'uint8'
(значение по умолчанию) | вектор символов | представляет скаляр в виде строки | n
-by-3 массив ячеекФормат сопоставленного содержимого области, заданного как пара, разделенная запятой, состоящая из 'Format'
и односимвольного вектора или скаляра строки или n
-by-3 массив ячеек.
Если область файла, которую вы сопоставляете, содержит данные только одного типа, задайте значение Format
как вектор символов или представьте в виде строки скаляр, идентифицирующий тот тип.
Example:'int16'
Чтобы задать форму массивов, чтобы примениться к чтению данных или записанный в отображаемый файл и имя поля, чтобы сослаться на этот массив, задают значение Format
как 1 3 массив ячеек. Первая ячейка содержит вектор символов или скаляр строки идентификация типа данных, чтобы примениться к сопоставленной области. Вторая ячейка содержит измерения массива, чтобы примениться к области. Третья ячейка задает имя поля, чтобы использовать в массиве структур Data
карты распределения памяти. Задайте имя поля как скаляр строки или вектор символов.
Пример:
{'uint64',[30 4 10],'x'}
Если область, которую вы сопоставляете, состоит из сегментов переменных типов данных или форм массивов, можно задать отдельный формат для каждого сегмента с помощью n
-by-3 массив ячеек, где n
является количеством сегментов.
Пример: {'uint64',[30 4 10],'x'; 'uint32',[30 4 6],'y'}
Можно использовать любой из следующих типов данных, когда вы задаете значение Format
:
'int8'
'int16'
'int32'
'int64'
'uint8'
'uint16'
'uint32'
'uint64'
'single'
'double'
Типы данных: char
| string
| cell
повторение
Число раз, чтобы применить параметр Format
Inf
(значение по умолчанию) | положительное целое числоЧисло раз, чтобы применить параметр Format
к сопоставленной области файла, заданного как пара, разделенная запятой, состоящая из 'Repeat'
и положительного целого числа. Если значением Repeat
является Inf
, то memmapfile
применяет параметр Format
до конца файла.
Пример: 'Repeat',2000
Типы данных: double
m
Карта распределения памятиmemmapfile
Карта распределения памяти, возвращенная как объект memmapfile
со следующими свойствами.
Свойство | Описание |
---|---|
| Путь и имя отображаемого файла |
| Тип доступа позволен сопоставленной области |
| Количество байтов от запуска файла к запуску сопоставленной области |
| Формат содержимого сопоставленной области, включая тип данных, размер массивов и имя поля, которым можно получить доступ к данным |
| Число раз, чтобы применить шаблон, заданный свойством Format в сопоставленную область файла |
| Данные с отображенной памятью из файла. Data может быть числовым массивом или массивом структур с именами полей, заданными в свойстве Format |
Значения для любого свойства (за исключением Data
) установлены в то время, когда вы вызываете memmapfile
, с помощью аргументов пары "имя-значение".
Доступ к любому свойству m
с записью через точку, подобной доступу к полям массива структур. Например, чтобы получить доступ к данным с отображенной памятью в свойстве Data
, выполнить одно из следующих действий:
Если Data
является числовым массивом, вызовите m.Data
.
Если Data
является скалярным массивом структур (1 на 1), вызовите
, где m.Data.fieldname
fieldname
является именем поля.
Если Data
является нескалярным массивом структур, вызовите
, где m.Data(index).fieldname
index
является индексом для элемента в массиве структур, и fieldname
является именем поля. Например, чтобы получить доступ к данным о файле в поле temperature
первого элемента Data
, вызовите m.Data(1).temperature
.
После того, как вы создадите карту распределения памяти, m
, можно изменить значение любого из его свойств, за исключением Data
. Чтобы присвоить новое значение, используйте запись через точку. Например, чтобы установить новое значение Offset
для m
, введите:
m.Offset = 2048;
Можно сопоставить только существующий файл. Вы не можете создать новый файл и сопоставить тот файл с памятью в одной операции. Используйте функции ввода-вывода файла MATLAB, чтобы создать файл прежде, чем попытаться сопоставить его с памятью.
После того, как memmapfile
определяет местоположение файла, MATLAB хранит абсолютный путь файла внутренне, и затем использует этот сохраненный путь, чтобы определить местоположение файла от той точки на. В результате можно работать в других директориях вне текущего рабочего каталога и сохранить доступ к отображаемому файлу.
memmapfile
не расширяет или добавляет к отображаемому файлу. Используйте вместо этого стандартные функции файлового ввода-вывода как fopen
и fwrite
.
Фактическое отображение файла к адресному пространству MATLAB не происходит, когда вы создаете объект memmapfile
. Карта распределения памяти, на основе информации, в настоящее время хранившей в сопоставленном объекте, сгенерирована в первый раз, когда вы ссылаетесь или изменяете свойство Data
для того объекта.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.