MATLAB Answers

0

How do I preallocate memory for a structure in MATLAB 7.6 (R2008a)?

Asked by MathWorks Support Team on 23 Sep 2013
Latest activity Commented on by Walter Roberson
on 15 Feb 2017 at 5:02

I would like to know how to preallocate memory for a structure.

1 Answer

Answer by MathWorks Support Team on 23 Sep 2013
 Accepted answer

There is a way to preallocate memory for a structure in MATLAB 7.6 (R2008a) using the STRUCT and REPMAT commands.

EXAMPLE 1: A structure with two fields

s.field1

s.field2

field_names = {'field1','field2'}; % Cell with field names
empty_cells = repmat(cell(1),1,numel(field_names));
entries = {field_names{:} ; empty_cells{:}};
s = struct(entries{:}); 

EXAMPLE 2: A structure with a field with a subfield

s.field1.subfield

s = struct('field1',struct('subfield',cell(1))); 

EXAMPLE 3: An array of structures

v(1).field1

...

v(100).field1

s = struct('field1',cell(1));
v = repmat(s,100,1);

Even though the data elements pointed to by the different fields in a structure are not stored contiguously, a benefit of preallocating structures is that you avoid the (possibly time-consuming) operation of dynamically growing the structure field header. Please refer to the following documentation page for more information:

http://www.mathworks.com/help/matlab/matlab_prog/memory-requirements-for-a-structure-array.html

  2 Comments

for command

empty_cells = repmat(cell(1),1,numel(field_names));

can't we use [], for defining empty cells under field_name, like

filed_name = {'field1',[],'field2',[]};  

The line

empty_cells = repmat(cell(1),1,numel(field_names));

creates a cell array of copies of [] . The line

entries = {field_names{:} ; empty_cells{:}};

arranges those copies below the field names, like

{ 'first', 'second', 'third';
  [],      [],       []      }

and the line

s = struct(entries{:}); 

converts that to

a = struct('first', [], 'second', [], 'third', [])

so already [] is being used.

The code given in the first part of the solution is code to automatically generate this just given the field names.

Log in to comment.


Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!