Programming Previous page   Next Page

Constructing a memmapfile Object

The first step in mapping to any file is to construct an instance of the memmapfile class using the class constructor function. You can have MATLAB assign default values to each of the new object's properties, or you can specify property values yourself in the call to the memmapfile constructor.

For information on how to set these values, see the sections that cover

Constructing the Object with Default Property Values

The simplest and most general way to call the constructor is with one input argument that specifies the name of the file you want to map. All other properties are optional and are given their default values. Use the syntax shown here:

To construct a map for the file records.dat that resides in your current working directory, type the following:

MATLAB constructs an instance of the memmapfile class, assigns it to the variable m, and maps the entire records.dat file to memory, setting all properties of the object to their default values. In this example, the command maps the entire file as a sequence of unsigned 8-bit integers, and gives the caller read-only access to its contents.

You can set any property to a new value at any time after the object has been constructed. Use the objname.property syntax to assign the new value. For example, to set a new offset value for memory map object m, type

Changing Property Values

You can make the memory map more specific to your needs by including more information when calling the constructor. In addition to the filename argument, there are four other parameters that you can pass to the constructor. Each of these parameters represents a property of the object, and each requires an accompanying value to be passed as well:

For example, to construct a map using nondefault values for the offset, format, and writable properties, type the following, enclosing all property names in quotes:

Type the object name to see the current settings for all properties:

You can also change the value any property after the object has been constructed. Use the syntax

For example, to change the format value for object m from uint32 to uint16, type the following. (Property names are not case sensitive.)

Further read and write operations to the region mapped by m will now treat the data in the file as a sequence of unsigned 16-bit integers. Whenever you change the value of a memmapfile property, MATLAB remaps the file to memory.

Selecting the File to Map

filename is the only required argument when you call the memmapfile constructor. When you call the memmapfile constructor, MATLAB assigns the filename that you specify to the filename property of the new object instance.

Specify the filename as a quoted string, (e.g., 'records.dat'). It must be first in the argument list and not specified as a parameter-value pair. filename must include a filename extension if the name of the file being mapped has an extension. The filename argument cannot include any wildcard characters (e.g., * or ?), and is not case sensitive.

If the file to be mapped resides somewhere on the MATLAB path, you can use a partial pathname. If the path to the file is not fully specified, MATLAB searches for the file in your current working directory first, and then on the MATLAB path.

Once memmapfile locates the file, MATLAB stores the absolute pathname for the file internally, and then uses this stored path to locate the file from that point on. This enables you to work in other directories outside your current work directory and retain access to the mapped file.

You can change the value of the filename property at any time after constructing the memmapfile object. You might want to do this if

For example, save memmapfile object m to file mymap.mat:

Now move the file to another location, load the object back into MATLAB, and update the path in the filename property:

Setting the Start of the Mapped Region

By default, MATLAB begins a memory map at the start of the file. To begin the mapped region at some point beyond the start of the file, specify an offset parameter in the call to the memmapfile constructor:

The bytecount value is the number of bytes from the beginning of the file to the point in the file where you want the memory map to start (a zero-based offset). To map the file records.dat from a point 1024 bytes from the start and extending to the end of the file, type

You can change the starting position of an existing memory map by setting the offset property for the associated object to a new value. The following command sets the offset of memmapfile object m to be 2,048 bytes from the start of the mapped file:

Identifying the Contents of the Mapped Region

By default, MATLAB considers all the data in a mapped file to be a sequence of unsigned 8-bit integers. To have the data interpreted otherwise as it is read or written to in the mapped file, specify a format parameter and value in your call to the constructor:

The formatspec argument can either be a character string that identifies a single data type used throughout the mapped region, or a cell array that specifies more than one data type.

For example, say that you map a file that is 12 kilobytes in length. Data read from this file could be treated as a sequence of 6,000 16-bit (2-byte) integers, or as 1,500 8-byte double-precision floating-point numbers, to name just a couple of possibilities. Or you could read this data in as a combination of different types: for example, as 4,000 8-bit (1-byte) integers followed by 1,000 64-bit (8-byte) integers. You determine how MATLAB will interpret the mapped data by setting the format property of the memmapfile object when you call its constructor.

Data types supported for the format property are shown at the end of this section. See Supported Data Types for the format Property.

For more information on format options see

Mapping a Single Data Type.   If the file region being mapped contains data of only one type, specify the format value as a character string identifying that type:

The following command constructs a memmapfile object for the entire file records.dat, and sets the format property for that object to uint64. Any read or write operations made via the memory map will read and write the file contents as a sequence of unsigned 64-bit integers:

You can change the value of the format property at any time after the memmapfile object is constructed. Use the object.property syntax shown here in assigning the new value:

Further read and write operations to the region mapped by m will now treat the data in the file as a sequence of signed 32-bit integers.

Property names, like format, are not case sensitive.

Formatting the Mapped Data to an Array.   You can also specify an array shape to be applied to the data read or written to the mapped file, and a field name to be used in referencing this array. Use a cell array to hold these values either when calling the memmapfile constructor or when modifying m.format after the object has been constructed. The cell array contains three elements: the data type to be applied to the mapped region, the dimensions of the array shape that is applied to the region, and a field name to use in referencing the data:

The command below constructs a memmapfile object for a region of records.dat such that the contents of the region are handled by MATLAB as a 4-by-10-by-18 array of unsigned 32-bit integers, and can be referenced in the structure of the returned object using the field name x:

You can change the data type, array shape, or field name that MATLAB applies to the mapped region at any time by setting a new value for the format property of the object:

Mapping Multiple Data Types and Arrays.   If the region being mapped is composed of segments of varying data types or array shapes, you can specify an individual format for each segment using an N-by-3 cell array, where N is the number of segments. The cells of each cell array row identify the data type for that segment, the array dimensions to map the data to, and a field name by which to reference that segment:

The following command maps a 24 kilobyte file containing data of three different data types: int16, uint32, and single. The int16 data is mapped as a 2-by-2 matrix that can be accessed using the field name model. The uint32 data is a scalar value accessed as field serialno. The single data is a 1-by-3 matrix named expenses.

Each of these fields belongs to the 800-by-1 structure array m.data:

Mapping of the Example File


The figure below shows the ordering of the array elements more closely. In particular, it illustrates that MATLAB arrays are stored on the disk in column-major order. The sequence of array elements in the mapped file is row 1, column 1; row 2, column 1; row 1, column 2; and row 2, column 2.

If the data in your file is not stored in this order, you might need to transpose or rearrange the order of array elements when reading or writing via a memory map.

Supported Data Types for the format Property .   Any of the following data types can be used when you specify a format value. The default type is uint8.

format String
Data Type Description
'int8'
Signed 8-bit integers
'int16'
Signed 16-bit integers
'int32'
Signed 32-bit integers
'int64'
Signed 64-bit integers
'uint8'
Unsigned 8-bit integers
'uint16'
Unsigned 16-bit integers
'uint32'
Unsigned 32-bit integers
'uint64'
Unsigned 64-bit integers
'single'
32-bit floating-point
'double'
64-bit floating-point

Repeating a Format Scheme

Once you have set a format value for the memmapfile object, you can have MATLAB apply that format to the file data multiple times by specifying a repeat value when you call the memmapfile constructor:

The repeat value applies to the whole format specifier, whether that specifier describes just a single data type that repeats, or a more complex format that includes various data types and array shapes. The default repeat value is infinity (inf), which means that the full extent of the format specifier repeats as many times as possible within the mapped region.

The next example maps a file region identical to that of the previous example, except the pattern of int16, uint32, and single data types is repeated only three times within the mapped region of the file:

You can change the value of the repeat property at any time. To change the repeat value to 5, type

Property names, like repeat, are not case sensitive.

Keeping the Repeated Format Within the Mapped Region.   MATLAB maps only the full pattern specified by the format property. If you repeat a format such that it would cause the map to extend beyond the end of the file, then either of two things can happen:

Considering the last example, if the part of the file from m.offset to the end were 70 bytes (instead of the 72 bytes required to repeat m.format three times) and you used a repeat value of Inf, then only two full repetitions of the specified format would have been mapped. The end result would be as if you had constructed the map with this command:

If repeat were set to 3 and you had only 70 bytes to the end of the file, you would get an error.

Setting the Type of Access

You can map a file region to allow either read-only or read and write access to its contents. Pass a writable parameter and value in the memmapfile constructor, or set m.writable on an existing object to set the type of access allowed:

The value passed can be either true (equal to logical(1)) or false (equal to logical(0)). By default, it is false, meaning that the mapped region is read only.

To map a read and write region of the file records.dat in memory, type

You can change the value of the writable property at any time. To make the memory map to records.dat read only, type

Property names, like writable, are not case sensitive.


Previous page  The memmapfile Class Reading a Mapped File Next page

© 1994-2005 The MathWorks, Inc.